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