Feature #546

String#gsub と Strnig#scan のブロックパラメータの一致

Added by Motonori IWAMURO 691 days ago. Updated 669 days ago.

Status :Open Start :09/06/2008
Priority :Normal Due date :
Assigned to :Yukihiro Matsumoto % Done :

0%

Category :core
Target version :2.0

Description

String#gsub のブロックパラメータの仕様を Strnig#scan のものに合わせることを提案します。

[ruby-dev:33548]からの一連のスレッドではいろいろ案が出たあげく議論が止まっていますが、

・現状の gsub の仕様では、カッコを付けたとき、ブロックパラメータがほとんど役に立たないので困る。
・gsub と scan は似た振る舞いをするので、ブロックパラメータの仕様も合わせるべき。
・scan の仕様で困ることはまずないので、こちらを変更する必然性はあまり無い。
・gsub のパターンにカッコを付けない場合、従来と同じなので互換性に問題はない。
・gsub のパターンにカッコを付けた場合、ブロックパラメータを参照するケースは極めて限定的と思われるので、仕様を変更しても影響は少ないと思われる。

以上の理由により、String#gsub (当然gsub!も) のブロックパラメータの仕様を Strnig#scan のものに合わせるのが、best ではないにしても better であると考えます。

History

09/06/2008 08:06 PM - Yukihiro Matsumoto

まつもと ゆきひろです

In message "Re: [ruby-dev:36174] [Feature #546] String#gsub 	と Strnig#scan 	のブロックパラメータの一致"
    on Sat, 6 Sep 2008 19:27:18 +0900, Motonori IWAMURO <redmine@ruby-lang.org> writes:

|String#gsub のブロックパラメータの仕様を Strnig#scan のものに合わせることを提案します。

|・gsub のパターンにカッコを付けない場合、従来と同じなので互換性に問題はない。
|・gsub のパターンにカッコを付けた場合、ブロックパラメータを参照するケースは極めて限定的と思われるので、仕様を変更しても影響は少ないと思われる。

うーん、本当かなあ。実際にやってみて誰かに「ぎゃっ」と言って
もらうしか確認の手段はないかもしれませんね。

09/06/2008 08:31 PM - Motonori IWAMURO

岩室です。

うは、前言一部撤回。

2008/09/06 20:00 Yukihiro Matsumoto <matz@ruby-lang.org>:
> |・gsub のパターンにカッコを付けた場合、ブロックパラメータを参照するケースは極めて限定的と思われるので、仕様を変更しても影響は少ないと思われる。
>
> うーん、本当かなあ。実際にやってみて誰かに「ぎゃっ」と言って
> もらうしか確認の手段はないかもしれませんね。

ちょっと調べてみました。

http://www.google.co.jp/codesearch?q=lang%3Aruby+gsub\s*\(.*\(.*(do|\{)\s*\|.*\|

意外と多い……。Railsにも影響ありそうだし。でも現行仕様が嬉しくないことも確かなんですけど。
-- 
IWAMURO Motnori <http://vmi.jp/>

09/06/2008 08:34 PM - Motonori IWAMURO

岩室です。

追記。gsub!のケースが抜けてました。

http://www.google.co.jp/codesearch?q=lang%3Aruby+gsub!%3F\s*\(.*\(.*(do|\{)\s*\|.*\|

倍に増えたorz (無関係なものも大量にひっかかってますけど)
-- 
IWAMURO Motnori <http://vmi.jp/>

09/10/2008 03:34 PM - Yui NARUSE

  • Category set to core
検索すると標準添付ライブラリでもひっかかっていますが、
こちらについてはすでに対処済みです。

まぁ、ぎゃっとなるケースでも、ブロックパラメータが String から MatchData になるだけなので、
str.gsub(/foo/){|bar| ...} ならば、
str.gsub(/foo/){|bar| bar=bar.to_s; ...} ならば、
にしておけばとりあえず動くようになるわけですが。

MatchData の method_missing に細工して、Stringのメソッドを呼ぶとかやるのは・・・
やめたほうがいいだろうなぁ。

09/10/2008 11:16 PM - Koichi Sasada

  • Assigned to set to Yukihiro Matsumoto

09/11/2008 12:33 AM - Motonori IWAMURO

岩室です。

この件、しばらく検討してみた結果、以下のように考えています。

・ブロックパラメータをscanと一致させることで、統一性が得られ、また、何より、マッチした文字列を$1, $2,
...ではなく名前での参照を可能にする。これは記述性や可読性の向上に貢献する。
・確かに、非互換による影響を受けるコードが少ないとは言い切れない。しかし、比較的検出が容易※で、1.8でも1.9でも動くような修正を行うことも容易であるため、変更のメリットは非互換のデメリットを上回る。

如何でしょうか。
-- 
IWAMURO Motnori <http://vmi.jp/>

09/11/2008 12:45 AM - Motonori IWAMURO

岩室です。

うえ、MatchDataにするんですか? scanと一致させて欲しいなぁ、と思ってるんですが……。

# scanもMatchDataにしたら、統一性は取れるだろうけど、もっと激しく、ぎゃっとなるような気する。

2008/09/10 15:28 Yui NARUSE <redmine@ruby-lang.org>:
> チケット #546 が更新されました。 (by Yui NARUSE)
>
> カテゴリ coreにセット
>
> 検索すると標準添付ライブラリでもひっかかっていますが、
> こちらについてはすでに対処済みです。
>
> まぁ、ぎゃっとなるケースでも、ブロックパラメータが String から MatchData になるだけなので、
> str.gsub(/foo/){|bar| ...} ならば、
> str.gsub(/foo/){|bar| bar=bar.to_s; ...} ならば、
> にしておけばとりあえず動くようになるわけですが。
>
> MatchData の method_missing に細工して、Stringのメソッドを呼ぶとかやるのは・・・
> やめたほうがいいだろうなぁ。
> ----------------------------------------
> http://redmine.ruby-lang.org/issues/show/546
>
> ----------------------------------------
> http://redmine.ruby-lang.org
-- 
IWAMURO Motnori <http://vmi.jp/>

09/25/2008 01:02 AM - Motonori IWAMURO

岩室です。

これの決定、1.9.1には間に合いませんか?

2008/09/11 0:38 IWAMURO Motonori <deenheart+ruby@gmail.com>:
> 岩室です。
>
> うえ、MatchDataにするんですか? scanと一致させて欲しいなぁ、と思ってるんですが……。
>
> # scanもMatchDataにしたら、統一性は取れるだろうけど、もっと激しく、ぎゃっとなるような気する。
>
> 2008/09/10 15:28 Yui NARUSE <redmine@ruby-lang.org>:
>> チケット #546 が更新されました。 (by Yui NARUSE)
>>
>> カテゴリ coreにセット
>>
>> 検索すると標準添付ライブラリでもひっかかっていますが、
>> こちらについてはすでに対処済みです。
>>
>> まぁ、ぎゃっとなるケースでも、ブロックパラメータが String から MatchData になるだけなので、
>> str.gsub(/foo/){|bar| ...} ならば、
>> str.gsub(/foo/){|bar| bar=bar.to_s; ...} ならば、
>> にしておけばとりあえず動くようになるわけですが。
>>
>> MatchData の method_missing に細工して、Stringのメソッドを呼ぶとかやるのは・・・
>> やめたほうがいいだろうなぁ。
>> ----------------------------------------
>> http://redmine.ruby-lang.org/issues/show/546
-- 
IWAMURO Motnori <http://vmi.jp/>

09/25/2008 01:21 AM - Yukihiro Matsumoto

まつもと ゆきひろです

In message "Re: [ruby-dev:36524] Re: [Feature #546] String#gsub 	と Strnig#scan 	のブロックパラメータの一致"
    on Thu, 25 Sep 2008 01:01:42 +0900, "IWAMURO Motonori" <deenheart+ruby@gmail.com> writes:

|これの決定、1.9.1には間に合いませんか?

いちおう、Yuguiさんには「検討するから待って」と伝えてありま
す。ただ、動かなくなるプログラムがどのくらいあるのか見積もれ
なくてねえ。

09/28/2008 04:22 PM - Yuki Sonoda

  • Target version set to 2.0

Also available in: Atom PDF