Feature #546

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

Added by Motonori IWAMURO over 6 years ago. Updated about 3 years ago.

Status:Rejected
Priority:Normal
Assignee:Yukihiro Matsumoto

Description

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

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

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

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

History

#1 Updated by Yukihiro Matsumoto over 6 years ago

=begin
まつもと ゆきひろです

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

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

=end

#2 Updated by Motonori IWAMURO over 6 years ago

=begin
岩室です。

うは、前言一部撤回。

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/

=end

#3 Updated by Motonori IWAMURO over 6 years ago

=begin
岩室です。

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

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

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

=end

#4 Updated by Yui NARUSE over 6 years ago

  • Category set to core

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

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

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

#5 Updated by Koichi Sasada over 6 years ago

  • Assignee set to Yukihiro Matsumoto

=begin

=end

#6 Updated by Motonori IWAMURO over 6 years ago

=begin
岩室です。

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

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

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

=end

#7 Updated by Motonori IWAMURO over 6 years ago

=begin
岩室です。

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

=end

#8 Updated by Motonori IWAMURO over 6 years ago

=begin
岩室です。

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

=end

#9 Updated by Yukihiro Matsumoto over 6 years ago

=begin
まつもと ゆきひろです

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

=end

#10 Updated by Yuki Sonoda over 6 years ago

  • Target version set to Next Major

=begin

=end

#11 Updated by Shyouhei Urabe over 4 years ago

  • Status changed from Open to Assigned

=begin

=end

#12 Updated by Yui NARUSE over 3 years ago

  • Project changed from Ruby trunk to CommonRuby
  • Category deleted (core)
  • Target version deleted (Next Major)

#13 Updated by Yui NARUSE over 3 years ago

  • Project changed from CommonRuby to Ruby trunk

#14 Updated by Yusuke Endoh about 3 years ago

  • Status changed from Assigned to Rejected

遠藤です。

長期間進展がみられないので閉じます。 を参照。

このチケットのように、まつもとさんがなんとなく乗り気になれない提案は、
定期的に忍耐強くまつもとさんに働きかけるなどしないと、採択の見込みは
薄いと思います。
(とか言ったらこのメールが刺激になって話が進んだりして)

Yusuke Endoh mame@tsg.ne.jp

Also available in: Atom PDF