From: "NARUSE, Yui" Date: 2008-02-01T01:51:54+09:00 Subject: [ruby-dev:33554] Re: block parameter of String#gsub 成瀬です。 Yukihiro Matsumoto wrote: > まつもと ゆきひろです > > In message "Re: [ruby-dev:33548] block parameter of String#gsub" > on Thu, 31 Jan 2008 15:49:51 +0900, "NARUSE, Yui" 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を与えるというものです。 おぉ、それはいいと思います。 String#scan のブロックパラメータの MatchData版も併せてほしいですね。 s, sg, sc だとそこはかとなく共通性もある・・・かも。 -- NARUSE, Yui DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA