From: Shin-ichro Hara Date: 1998-11-25T17:46:47+09:00 Subject: [ruby-dev:3669] Re: Multiple assignment at yield() 原です。 この [ruby-dev:3610] の説明はですね。「リスト」という言葉を使 うと簡単になるんですよ。しつこいけど、もう一度やってしまうと、 0個以上のカンマで区切られた式をリストと呼ぶ カンマがないリスト(0 とか [0,1] とか)を単項リストと呼ぶ さて、多重代入「リスト = リスト」のパターンは (1)x, *y = [1, 2] #非単項リスト = 単項リスト (2)x, *y = 1, 2, 3 #非単項リスト = 非単項リスト (3)*y = [1, 2] #単項リスト = リスト などがあります。そして仕様 A では「右辺をまず to_a で配列にする」 のですが、仕様 B では、 「非単項リスト = 単項リスト」の場合のみ右辺を to_a に 基づいたリストにする のです。つまり (1) x, *y = [1, 2] #=> x, *y = 1, 2 と変換されます。もし右辺が {1=>2, 3=>4} だったなら、 x, *y = {1=>2, 3=>4} #=> x, *y = [1,2], [3,4] と変換されます。 次に x などの単純な変数を右辺の各項で埋めてから *y に「残った リストを」無条件に配列にして代入します。 (1)x = 1, y = [2] (2)x = 1, y = [2, 3] (3)y = [[1, 2]] こんな感じのモデルです。最大の問題は ruby にリストのクラスというもの が無いことでしょうか。(^^;