Feature #546

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

Added by Motonori IWAMURO over 3 years ago. Updated 3 months ago.

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

0%

Category:-
Target version:-

Description

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

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

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

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

History

Updated by Yukihiro Matsumoto over 3 years ago

まつもと ゆきひろです

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 のパターンにカッコを付けた場合、ブロックパラメータを参照するケースは極めて限定的と思われるので、仕様を変更しても影響は少ないと思われる。

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

Updated by Motonori IWAMURO over 3 years ago

岩室です。

うは、前言一部撤回。

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/>

Updated by Motonori IWAMURO over 3 years ago

岩室です。

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

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

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

Updated by Yui NARUSE over 3 years ago

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

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

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

Updated by Koichi Sasada over 3 years ago

  • Assignee set to Yukihiro Matsumoto

Updated by Motonori IWAMURO over 3 years ago

岩室です。

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

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

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

Updated by Motonori IWAMURO over 3 years ago

岩室です。

うえ、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/>

Updated by Motonori IWAMURO over 3 years ago

岩室です。

これの決定、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/>

Updated by Yukihiro Matsumoto over 3 years ago

まつもと ゆきひろです

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さんには「検討するから待って」と伝えてありま
す。ただ、動かなくなるプログラムがどのくらいあるのか見積もれ
なくてねえ。

Updated by Yuki Sonoda over 3 years ago

  • Target version set to 3.0

Updated by Shyouhei Urabe over 1 year ago

  • Status changed from Open to Assigned

Updated by Yui NARUSE 4 months ago

  • Project changed from ruby-trunk to 14
  • Category deleted (core)
  • Target version deleted (3.0)

Updated by Yui NARUSE 3 months ago

  • Project changed from 14 to ruby-trunk

Also available in: Atom PDF