まつもと ゆきひろです

In message "[ruby-dev:13567] Parallel Assignment"
    on 01/06/13, Shin-ichiro HARA <sinara / blade.nagaokaut.ac.jp> writes:

|(1)そもそもはyieldに与えられた引数をそのまま他のメソッドのyieldに丸
|投げできない、という話ですよね。これは
|
|   {|x| yield x}
|
|という構文で可能です。以前からそうです。これを
|
|   {|*x| yield *x}
|
|と書いてしまうのは、(それなりにセンスのいい)間違いです。
|(「Rubyプログラミング入門p204にも書きました。)

今の仕様ならこれも動くんでないでしょうか。あ、*1が[1]になる
から駄目か。

|(2)1.6.4 で *a = [] #=> a == [[]] となってしまっているのは、単なる
|バグで、正しくは a == [] です。

えーと、1.6.4でもa == []だと思います。

|   a = *[] #=> nil
|
|だけが新しいところで、後は今まで(1.6.4以前)と変わってないと思いました。
|それでいいですよね?

すでに気がついておられますが違います。

|[ruby-dev:13528]における田中さんの要約では、
|
| >    さらに、右辺式が「式1 `,' `*' 式2」という形で
| >    配列に変換した式2 の値が [] の場合、
| >    式1 の値自体が右辺の値となります。
|
|だけが違っていて、正しく(まつもとさんのそこでの意図)は
|
|     式1 の値自体が右辺の値となるのではなく、式1, nil が
|     右辺の値となります。
|
|というところでしょうか。

      [式1]が右辺の値になります。

|(4)次の主張は正しいとしてFIXしませんか?
|
|   すべての(多重代入を含む)代入
|
|     A = B
|
|   は、ただ一つの変数xをもって、
|
|     x = B
|     A = x
|
|   と書ける。

同意します。あ、ただ前田案が台頭してくればまた話は違うでしょ
うが。

|で、今後は B をオブジェクトとして評価した時(つまりxの値)がどうあるべ
|きか、それを A に代入したときどうなるのか、と2つに分けて議論していい
|わけですね。

はい。

|(5)今問題になってるのは何ですか?(^^;

今の仕様、つまり[ruby-dev:13503]に表現した仕様は

  * 複雑すぎ
  * 田中さんの好みに合わない

ということなのでは。複雑という点では同意します。ま、Rubyは他
のところも突き詰めると複雑なところが多いんですけど。

                                まつもと ゆきひろ /:|)