|a, b| expr;
Xtalは、fun(a, b) expr; で関数式を記述できますが、|a, b| expr;という書式でも関数を作ることが出来ます。
0.9.7.0より前では、fun(a, b) expr; と |a, b| expr; に違いは無かったのですが、0.9.7.0からは|a, b| expr; の挙動を変更しました。
a, b | expr; で関数を生成した場合、「引数は多重代入と同じルールで渡される」という仕様になりました。 |
add: |a, b| a+b; add([5, 10]).p; //=> 15 // 配列を渡すと展開されて代入される make_array: |a| a; make_array(7, 8, 9, 7).p; //=> [7,8,9,7] // 多すぎる引数を渡すと、配列にまとめられて代入される
これにより、次のような記述が出来るようになります。
array.each.with_index.with_index.map(|index1, index2, value| index + index2 + value);
これまでの仕様では、mapで渡した関数に渡される引数は([index1, [index2, value ] ]); であるため、上のように書けず、次のようにしなければなりませんでした。
array.each.with_index.with_index.map(|v| v[0] + v[1][0] + v[1][1]);