原です。

このスレッドは平行代入分科会です。:-)
(Procがらみはおいておきます。)

しかし、Rubyにおいて平行代入(Parallel Assignment)というのは無く、
多重代入あるいは重複代入と言うべきなのでこのスレッドタイトルは間違
っていると言っていいですね。


 >まつもと ゆきひろです

 >それはPerl的です。^^;;;
 >
 >文法構造としてのリストと配列の両方があるばっかりに混乱した人
 >は大勢いるはずです(私も経験があります)。なにもその轍をまた踏
 >まなくても。

先に私が言ったリストってのはどちらかというと文法構造の方かな。Perlがや
やこしいのは、「コンテキスト」によってリストが異なる評価を受けるからで
すよね。Rubyのいいところは比較的コンテキストから自由であるところで、局
所的に見た目が同じなら同じものを表現するという傾向があるわけですよ。
matz方式だと、代入の右辺と配列の中と、見た目同じであるものが文脈で異な
る解釈を受けているように感じられません?それこそPerl 的です。

#とmatzにRubyの精神を説くか私って^^;


 >になるわけですよね。私の感覚では式の列の末尾についている値に
 >よって、式の列全体に影響が及ぶのはかなり抵抗があります。よっ
 >て、現状(1.7)の
 >
 > r1 = [1,2]
 > r2 = []
 > a = r1, *r2  # [[1,2]]
 >
 > r2 = [3]
 > a = r1, *r2 # [[1,2],3]
 >
 >の方が望ましいと思うわけです。

ふーむ。3つの変数a,r1,r2による式「a = r1, *r2」によるr1の評価のされ方
がr2の値によって大きく変化するのが不自然だという訳ですね。
しかし、値として

   「, *[]」はあってもなくても同じ

という原理一本やりの方がきれいじゃないかしら。
ヴィジュアルに訴えてみますね。

今、Aを等号の右辺とします。次のテーブルを用意します。

   Aの表
   1      1,2
   [1]    [1],[2]
   [1,2]

すると代入は次の表で与えられます。

   a=A でのaの値
   1      [1,2]
   [1]    [[1],[2]]
   [1, 2]

左右(単数/複数)で場合分けが起こっています。
で、,*[]をつけると田中-原式では

   a=A,*[] でのaの値(田中-原式)
   1      [1,2]
   [1]    [[1],[2]]
   [1, 2]

となって全く変わらないけど、matz式では

   a=A,*[] でのaの値(matz式)
   [1]    [1,2]
   [[1]]  [[1],[2]]
   [[1,2]]

と変わってしまう、、、うーん、悪くないですね。^^;


結局、[]やメソッド引数の中での展開と=の右辺での展開が同じように
見えるという点で田中-原式は利点があり、,*r のrの変化による自然さ
でmatz式に利点がある、とまとめられますか。