けいじゅ@日本ラショナルソフトウェアです.

In [ruby-dev :7700 ] the message: "[ruby-dev:7700] new syntax (Re: Re: Ruby 2.0 の話題解禁) ", on Aug/17 01:22(JST) 
Yukihiro Matsumoto writes: 
>まつもと ゆきひろです
>
>In message "[ruby-dev:7678] Re: Ruby 2.0 の話題解禁 (	Re: Newcoerce scheme)"
>    on 99/08/15, Inaba Hiroto <inaba / st.rim.or.jp> writes:
>
>|今、method=というメソッドは「obj.method = val」という形で呼び出せるのに
>|
>|「obj.method(arg1, arg2...) = val」というシンタックスは許されて
>|
>|いないのですね。これを許すようにはできませんか?
>
>えーと、以前そうしようと思った記憶があるのに、現在そうなって
>ないところを見ると、なにか難しい問題があるんでしょうね。
># 忘れているので、人事モード ^^;;;
>
>ま、でも、この機会に再検討してみましょう。

あまり反対はないんですが 元々の Rubyの代入の考え方とずれが大きくなってい
るのが気になりますよね...

C++なら,

  var = val
  obj.foo(...) = val

はどっちも同じ意味ですが, Ruby の

  var = val

と

  obj.foo = val

はだいぶ意味が違いますよね. 変数の代入とメソッド呼び出ですので. 慣習的に
obj.fooで表されるインスタンス変数に代入するという用法になっていいるので, 
通常の代入と同じ意味で使えているだけですよね.

このことは, [], []= も大体同じことが言えると思います.

でも, メソッドにパラメータが付くと, よく意味が...

  obj.foo(...) = val

これはどういう意味なんだろう? って気になりせん? この場合対応する変数
obj.foo(...)って存在しませんし... どういったときに使うといった用法的な意
味付けも結構曖昧になりそうだと思うのですが.... 

まあ,

  ary.indexes(...) = [...]

に使いたいということも理解できないでもないんで, あまり心配することもない
ですかね...

ちなみにRubyのビルトインメソッドで使えそうなのは.

  array.indexes(...)= [...]
  array.fill(start = nil, last = nil) = val
  hash.indexes(...)= [...]
  string.gsub(search) = replace
  string.gsub!(search) = replace
  string.sub(search) = replace
  string.tr(search) = replace
  string.tr!(search) = replace

ぐらいですかね. ただ, メソッドの戻り値が違って来ると思いますが.

ちなみに, array.fillの例の通り 引数は省略可能だけど, 右辺値は省略可能で
はないので,

  def fill=(右辺値, 引数...)

みたいな感じで定義できるといいかも... また, ブロック引数と同じで

  def fill(引数,..., =右辺値)

とか.
  

__
..............................石塚 圭樹@日本ラショナルソフトウェア...
----------------------------------->> e-mail: keiju / rational.com <<---