Feature #546
closedString#gsub と Strnig#scan のブロックパラメータの一致
Added by iwa (Motonori IWAMURO) about 16 years ago. Updated almost 13 years ago.
Description
=begin
String#gsub のブロックパラメータの仕様を Strnig#scan のものに合わせることを提案します。
[ruby-dev:33548]からの一連のスレッドではいろいろ案が出たあげく議論が止まっていますが、
・現状の gsub の仕様では、カッコを付けたとき、ブロックパラメータがほとんど役に立たないので困る。
・gsub と scan は似た振る舞いをするので、ブロックパラメータの仕様も合わせるべき。
・scan の仕様で困ることはまずないので、こちらを変更する必然性はあまり無い。
・gsub のパターンにカッコを付けない場合、従来と同じなので互換性に問題はない。
・gsub のパターンにカッコを付けた場合、ブロックパラメータを参照するケースは極めて限定的と思われるので、仕様を変更しても影響は少ないと思われる。
以上の理由により、String#gsub (当然gsub!も) のブロックパラメータの仕様を Strnig#scan のものに合わせるのが、best ではないにしても better であると考えます。
=end
Updated by matz (Yukihiro Matsumoto) about 16 years ago
=begin
まつもと ゆきひろです
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 のパターンにカッコを付けた場合、ブロックパラメータを参照するケースは極めて限定的と思われるので、仕様を変更しても影響は少ないと思われる。
うーん、本当かなあ。実際にやってみて誰かに「ぎゃっ」と言って
もらうしか確認の手段はないかもしれませんね。
=end
Updated by iwa (Motonori IWAMURO) about 16 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
Updated by iwa (Motonori IWAMURO) about 16 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
Updated by naruse (Yui NARUSE) about 16 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
Updated by ko1 (Koichi Sasada) about 16 years ago
- Assignee set to matz (Yukihiro Matsumoto)
=begin
=end
Updated by iwa (Motonori IWAMURO) about 16 years ago
=begin
岩室です。
この件、しばらく検討してみた結果、以下のように考えています。
・ブロックパラメータをscanと一致させることで、統一性が得られ、また、何より、マッチした文字列を$1, $2,
...ではなく名前での参照を可能にする。これは記述性や可読性の向上に貢献する。
・確かに、非互換による影響を受けるコードが少ないとは言い切れない。しかし、比較的検出が容易※で、1.8でも1.9でも動くような修正を行うことも容易であるため、変更のメリットは非互換のデメリットを上回る。
如何でしょうか。¶
IWAMURO Motnori http://vmi.jp/
=end
Updated by iwa (Motonori IWAMURO) about 16 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
Updated by iwa (Motonori IWAMURO) about 16 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
Updated by matz (Yukihiro Matsumoto) about 16 years ago
=begin
まつもと ゆきひろです
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さんには「検討するから待って」と伝えてありま
す。ただ、動かなくなるプログラムがどのくらいあるのか見積もれ
なくてねえ。
=end
Updated by shyouhei (Shyouhei Urabe) about 14 years ago
- Status changed from Open to Assigned
=begin
=end
Updated by naruse (Yui NARUSE) about 13 years ago
- Project changed from Ruby master to 14
- Category deleted (
core) - Target version deleted (
3.0)
Updated by naruse (Yui NARUSE) about 13 years ago
- Project changed from 14 to Ruby master
Updated by mame (Yusuke Endoh) almost 13 years ago
- Status changed from Assigned to Rejected
遠藤です。
長期間進展がみられないので閉じます。[ruby-core:42391] を参照。
このチケットのように、まつもとさんがなんとなく乗り気になれない提案は、
定期的に忍耐強くまつもとさんに働きかけるなどしないと、採択の見込みは
薄いと思います。
(とか言ったらこのメールが刺激になって話が進んだりして)
--
Yusuke Endoh mame@tsg.ne.jp
Updated by shyouhei (Shyouhei Urabe) about 6 years ago
- Related to Feature #12745: String#(g)sub(!) should pass a MatchData to the block, not a String added