Xtalの多値2

多重代入で、左辺の数が右辺の値の数より小さい場合、最後の左辺の変数に、配列として纏められ代入されます。

foo: fun(){ return 0, 1, 2, 3, 4; }
a, b: foo();
a.p; //=> 0
b.p; //=> [1, 2, 3, 4]

左辺の最後に , (カンマ) を余計につけると、配列として纏められず後の値は捨てられます。

foo: fun(){ return 0, 1, 2, 3, 4; }
a, b,: foo();
a.p; //=> 0
b.p; //=> 1

左辺の数が右辺の値の数より多く、さらに右辺の最後の要素が配列の場合、配列は展開されます。

a, b, c: 0, [1, 2];
a.p; //=> 0
b.p; //=> 1
c.p; //=> 2

右辺の最後の要素の配列を展開してもまだ左辺が多い場合、配列の最後の要素を調べ、それが配列なら再び展開されます。

a, b, c, d: 0, [1, [2, 3]];
a.p; //=> 0
b.p; //=> 1
c.p; //=> 2
d.p; //=> 3

最後の配列の要素の数が、左辺の数を超えると、超えた分が配列として纏められます。

a, b, c: 0, [1, 2, 3];
a.p; //=> 0
b.p; //=> 1
c.p; //=> [2, 3]

もちろん、 , (カンマ) を付けると切り捨てられます。

a, b, c,: 0, [1, 2, 3];
a.p; //=> 0
b.p; //=> 1
c.p; //=> 2

最後の要素が配列でなければ、nullで埋ります。

a, b, c: 0, 1;
a.p; //=> 0
b.p; //=> 1
c.p; //=> null