Project

General

Profile

Actions

Feature #546

closed

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

Added by iwa (Motonori IWAMURO) over 15 years ago. Updated about 12 years ago.

Status:
Rejected
Target version:
-

Description

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

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

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

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


Related issues 1 (0 open1 closed)

Related to Ruby master - Feature #12745: String#(g)sub(!) should pass a MatchData to the block, not a StringFeedbackmatz (Yukihiro Matsumoto)Actions
Actions #1

Updated by matz (Yukihiro Matsumoto) over 15 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 writes:

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

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

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

=end

Actions #2

Updated by iwa (Motonori IWAMURO) over 15 years ago

=begin
岩室です。

うは、前言一部撤回。

2008/09/06 20:00 Yukihiro Matsumoto :

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

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

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

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

意外と多い……。Railsにも影響ありそうだし。でも現行仕様が嬉しくないことも確かなんですけど。

IWAMURO Motnori http://vmi.jp/

=end

Actions #3

Updated by iwa (Motonori IWAMURO) over 15 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

Actions #4

Updated by naruse (Yui NARUSE) over 15 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

Actions #5

Updated by ko1 (Koichi Sasada) over 15 years ago

  • Assignee set to matz (Yukihiro Matsumoto)

=begin

=end

Actions #6

Updated by iwa (Motonori IWAMURO) over 15 years ago

=begin
岩室です。

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

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

如何でしょうか。

IWAMURO Motnori http://vmi.jp/

=end

Actions #7

Updated by iwa (Motonori IWAMURO) over 15 years ago

=begin
岩室です。

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

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

2008/09/10 15:28 Yui NARUSE :

チケット #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

Actions #8

Updated by iwa (Motonori IWAMURO) over 15 years ago

=begin
岩室です。

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

2008/09/11 0:38 IWAMURO Motonori :

岩室です。

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

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

2008/09/10 15:28 Yui NARUSE :

チケット #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

Actions #9

Updated by matz (Yukihiro Matsumoto) over 15 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" writes:

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

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

=end

Actions #10

Updated by yugui (Yuki Sonoda) over 15 years ago

  • Target version set to 3.0

=begin

=end

Actions #11

Updated by shyouhei (Shyouhei Urabe) over 13 years ago

  • Status changed from Open to Assigned

=begin

=end

Actions #12

Updated by naruse (Yui NARUSE) over 12 years ago

  • Project changed from Ruby master to 14
  • Category deleted (core)
  • Target version deleted (3.0)
Actions #13

Updated by naruse (Yui NARUSE) over 12 years ago

  • Project changed from 14 to Ruby master

Updated by mame (Yusuke Endoh) about 12 years ago

  • Status changed from Assigned to Rejected

遠藤です。

長期間進展がみられないので閉じます。[ruby-core:42391] を参照。

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

--
Yusuke Endoh

Actions #15

Updated by shyouhei (Shyouhei Urabe) over 5 years ago

  • Related to Feature #12745: String#(g)sub(!) should pass a MatchData to the block, not a String added
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0