[#37679] [FEATURE:trunk] EncDet again — "Yugui (Yuki Sonoda)" <yugui@...>

Yuguiです。

23 messages 2009/01/03

[#37748] $LOAD_PATHとバージョンの運用の関係 — akira yamada / やまだあきら <akira@...>

1.9系でのバージョンの運用と$LOAD_PATHの値について質問です。

12 messages 2009/01/09
[#37758] Re: $LOAD_PATHとバージョンの運用の関係 — "NARUSE, Yui" <naruse@...> 2009/01/11

成瀬です。

[ruby-dev:37842] Re: MatchData#[] などが返す String

From: "NARUSE, Yui" <naruse@...>
Date: 2009-01-27 13:12:33 UTC
List: ruby-dev #37842
成瀬です。

KISHIMOTO, Makoto wrote:
> きしもとです
> 
> MatchData の [] などが返す String についてなのですが、
> chop! などのような副作用のあるメソッドを呼ぶと、エラーに
> ならず変更できたかのように見えて変更されてないですが、
> freeze して(あるいは freeze されたかのような)、
> 変更しようとしたらエラーになるオブジェクトにするか、
> あるいは副作用による変更が可能なオブジェクトにするか、の
> どちらかのほうがいいのではないでしょうか?

とりあえず現状について説明しますと、
irb(main):001:0>m = "abcde".match(/(.)b(.)d(.)/)
=> #<MatchData "abcde" 1:"a" 2:"c" 3:"e">
irb(main):002:0> m1 = m[1]
=> "a"
irb(main):003:0> m1.chop!
=> ""
irb(main):004:0> m1
=> ""
irb(main):005:0> m[1]
=> "a"
という感じで、
つまり m[1] は中に保存している String のコピーを返しているのです。

取得元の MatchedData のことを気にせず弄り回せるので、
これはこれでメリットがあると思いますが、
原本を返したほうがいいという主張に切り替えます?

-- 
NARUSE, Yui  <naruse@airemix.jp>

In This Thread