西@九大です。

From: "NAKAMURA, Hiroshi" <nakahiro / sarion.co.jp>
> Ruby界の2000年問題と言えばブチキレ新聞のテキスト退化ですが,
> その西さんはどうなんだろう,とか言ってみる.

呼ばれて出て来た訳ではないですが(意訳:呼ばれたので出てきました)、実は
話を追ってなかったりします。(慌てて元記事を探しているらしい)
#ちなみに、退化でなく進化です。「進化の終着地点は自滅」(碇ゲンドウ)

要するに、「String#gsub! の戻り値の仕様が変わる(成否を返さない)」とい
う事ですか?そりゃ、一大事ですね。

私は基本的に反対です。理由は 3つ。せーの、ドン!

  1. そのメリットが不明。(過去記事読めよ、ていうか ruby-talk?)
  2. 「bang method が成否を返す」という現在の統一的な仕様は美しい。
    (一部の "!" メソッドだけが成否を返す、とかいうのは絶対に嫌)
  3. &~ は Thread の事を考えると、あいたたた。(意訳:論外)。

で、[1]のメリットはもしかして「method chain し易い」という事ですか?も
しそうなら、「cascading messages いいじゃん、ていうか、やっぱり必要で
しょ?」という気分です。(今回の例は文字列なので特に)

[2]に関しては、現在の Ruby において、"!" が持つ意味として「自己破壊的」
「成否を返す」の2つが上げられると思いますが、今回の変更によりこれから
は、"!" は前者だけを意味するようになるのでしょうか?

というか、むしろ、今回の変更の意義はそこにあって、一つの記号に複数の意
味を持たせるのを辞めたい、とか?確かに既にちょこっと無理してる気配もあ
りますね。では、それぞれを "!","?" に分解しましょう。

  String#gsub   => 置換後の文字列を返す(置換失敗時は self)
  String#gsub!  => 自身を置換し、その文字列を返す(置換失敗時は self)
  String#gsub!? => 自身を置換し、せの成否を返す
  String#gsub?  => 文字列を置換し、成否を返す(意味ないじゃん)

すんません、破綻しました。。。

From: matz / netlab.co.jp (Yukihiro Matsumoto)
> 出るのは理解できます。ま、私(たち)がメソッドチェーンが結構好
> きと言うのはありそうです。

なのに、cascading は好きじゃなかったりします?本質的には同じなので、
個人的には「両方好き」「両方嫌い」のどちらかしかないだろう、と思って
いたのですが。

------------------------------------------------------------------
九州大学大学院システム情報科学研究科 情報工学専攻 博士後期課程三年
      西 和則   ( e-mail: kazunori / swlab.csce.kyushu-u.ac.jp )
------------------------------------------------------------------