From: Shin-ichiro HARA Date: 2001-06-13T17:12:17+09:00 Subject: [ruby-dev:13567] Parallel Assignment 原です。 別スレッドにさせてください。 田中さんも *a = [] #=> a == [[]] がいいんじゃないかって言ってましたよ ね。私も[ruby-dev:3594]やあちこちで同じ事を主張したみたいです。たぶん 根拠も同じです。でも私は互換性の観点からこの主張は捨てます。 >> 次回がないようにがんばりましょう。がんばってください。 > >2度あることは 3度あるというわけで、ぜったいあると思います。 3度目が再び自分じゃないかって気がしてきました。前倒しして今話に参加し た方が経済的みたい。:-) 自分の頭を整理しつつ、確認と質問と意見を。 (1)そもそもはyieldに与えられた引数をそのまま他のメソッドのyieldに丸 投げできない、という話ですよね。これは {|x| yield x} という構文で可能です。以前からそうです。これを {|*x| yield *x} と書いてしまうのは、(それなりにセンスのいい)間違いです。 (「Rubyプログラミング入門p204にも書きました。) (2)1.6.4 で *a = [] #=> a == [[]] となってしまっているのは、単なる バグで、正しくは a == [] です。 (3) >> ところで最終的に今回の結論はどうなったんでしょう? >> >> まつもとさんの[ruby-dev:13503]のassert列と田中さんの >> [ruby-dev:13528]のサマリーでFIXと考えてよいのでしょう >> か? > >私のは少々修正が必要ですが、基本的に多重代入本体はそれで決定で、残りは >Proc まわり、とまつもとさんは思っていると想像しています。 まつもとさんの[ruby-dev:13503]を読んでみたんですが、 a = *[] #=> nil だけが新しいところで、後は今まで(1.6.4以前)と変わってないと思いました。 それでいいですよね? [ruby-dev:13528]における田中さんの要約では、 > さらに、右辺式が「式1 `,' `*' 式2」という形で > 配列に変換した式2 の値が [] の場合、 > 式1 の値自体が右辺の値となります。 だけが違っていて、正しく(まつもとさんのそこでの意図)は 式1 の値自体が右辺の値となるのではなく、式1, nil が 右辺の値となります。 というところでしょうか。 (4)次の主張は正しいとしてFIXしませんか? すべての(多重代入を含む)代入 A = B は、ただ一つの変数xをもって、 x = B A = x と書ける。 で、今後は B をオブジェクトとして評価した時(つまりxの値)がどうあるべ きか、それを A に代入したときどうなるのか、と2つに分けて議論していい わけですね。 (5)今問題になってるのは何ですか?(^^;