まつもと ゆきひろです 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は他 のところも突き詰めると複雑なところが多いんですけど。 まつもと ゆきひろ /:|)