From: Yukihiro Matsumoto <matz@...>
Date: 2008-01-31T23:32:47+09:00
Subject: [ruby-dev:33553] Re: block parameter of String#gsub

まつもと ゆきひろです

In message "Re: [ruby-dev:33548] block parameter of String#gsub"
    on Thu, 31 Jan 2008 15:49:51 +0900, "NARUSE, Yui" <naruse@airemix.com> writes:

|Ruby スレッドで出ていた話題なのですが、現在の String#gsub がブロックを受
|け取った時、ブロックには $& が渡されています。

|これだと、事実上ブロックパラメータは使い物にならないので、MatchData を渡
|すようにしませんか。

これは気にしていたのですが、互換性のことがあるので躊躇してい
ました。

|気になるのは互換性ですが m.to_s は 今までの $& と一致するので、
|"abcdefg".gsub(/(.).(.)/){|m| m+","} はさすがにエラーが出ますが、
|"abcdefg".gsub(/(.).(.)/){|m| "%s," % m} なら今まで通り動きますし、
|そもそもおそらくほとんどの現在のコードは、
|"abcdefg".gsub(/(.).(.)/){$&+","} でしょう。

うーん、そこまで割り切れるのかなあ。他の人の意見を聞きたいと
ころです。

私が考えていた(けど、1.9.0には間に合わなかった)アイディアは、
subに対応するs、gsubに対応するsg(またはgs)メソッドをStringク
ラスに新設し、こちらではMatchDataを与えるというものです。

どういうのが良いでしょうね。

                                まつもと ゆきひろ /:|)