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を与えるというものです。 どういうのが良いでしょうね。 まつもと ゆきひろ /:|)