[#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:37848] Re: MatchData#[] などが返す String

From: "KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp>
Date: 2009-01-28 02:56:39 UTC
List: ruby-dev #37848
"NARUSE, Yui" wrote:
> 成瀬です。
> 
> 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 のことを気にせず弄り回せるので、
> これはこれでメリットがあると思いますが、
> 原本を返したほうがいいという主張に切り替えます?

あー。[] はコピーを返していたのですか。
今書いているコードで、明示的に dup してたのですが、余計だったわけですね。

m = ['abcde', 'a', 'c', 'e']
m1 = m[1]

としたときとの類似性から、原本を返したほうがいいような気もしますが、
そうすると現行のコードへの影響が大きそうですので、この提案はひっこめます。

In This Thread

Prev Next