[#7631] 1.3 to 1.4 — Katsuyuki Komatsu <komatsu@...>

小松です。

26 messages 1999/08/12
[#7632] Re: 1.3 to 1.4 — matz@... (Yukihiro Matsumoto) 1999/08/12

まつもと ゆきひろです

[#7634] Re: 1.3 to 1.4 — Katsuyuki Komatsu <komatsu@...> 1999/08/13

小松です。

[#7636] Re: 1.3 to 1.4 — matz@... (Yukihiro Matsumoto) 1999/08/13

まつもと ゆきひろです

[#7638] cvs HEAD (Re: Re: 1.3 to 1.4) — EGUCHI Osamu <eguchi@...> 1999/08/13

えぐち@エスアンドイーです。

[#7647] Re: cvs HEAD (Re: Re: 1.3 to 1.4) — matz@... (Yukihiro Matsumoto) 1999/08/13

まつもと ゆきひろです

[#7641] Re: [ruby-ext:00382] New coerce scheme — keiju@... (石塚圭樹)

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

26 messages 1999/08/13

[ruby-dev:7707] Re: new syntax (Re: Re: Ruby 2.0 の話題解禁)

From: matz@... (Yukihiro Matsumoto)
Date: 1999-08-17 16:34:23 UTC
List: ruby-dev #7707
まつもと ゆきひろです

In message "[ruby-dev:7703] Re: new syntax (Re: Re: Ruby 2.0       の話題解禁)"
    on 99/08/17, 石塚圭樹 <keiju@Rational.Com> 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(...) = val
|
|これはどういう意味なんだろう? って気になりせん? この場合対応する変数
|obj.foo(...)って存在しませんし... どういったときに使うといった用法的な意
|味付けも結構曖昧になりそうだと思うのですが.... 

もともと obj.foo = val は「objのfooという属性をvalにする」と
いう仮想的な意味なわけですから、obj.foo(a)=valは「objの
foo(a)という属性をvalにする」という意味がとれる文脈でならば
問題ない使い方でしょうし(C++でリファレンスを返すようなコンテ
キスト)、逆にそういう意味にとれない場合に使うのははっきり言っ
て乱用でしょう。しかし、乱用される可能性があるからという理由
では禁止する必要はないと思います。

とはいえ、採用する前にもうちょっと考えた方が良いような予感が
しているのも確かなんですが。

|ちなみに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
|
|ぐらいですかね. ただ, メソッドの戻り値が違って来ると思いますが.

そうですねえ。でも、これらはやっぱり「使いすぎ」のような気が
します。
                                まつもと ゆきひろ /:|)

In This Thread