Object.@による引数の配列の展開と引数の配列化
Lispのバッククォート構文の,@やRubyの*です。
実引数に置くと、その配列*1が展開されます。
`a b c[a.+ b.+ c].invoke({1 2 3}.@) //6 `a b c[a.+ b.+ c].invoke(10 {2 3}.@) //15 `a b c[a.+ b.+ c].invoke({1}.@ 20 30) //51 `a b c[a.+ b.+ c].invoke(1...4.@) //6
仮引数に置くと、それ以降の引数が配列化します。
`rest.@[rest.[0].+ (rest.[1]).+ (rest.[2])].invoke(1 2 3) //6 `a rest.@[a.+ (rest.[0]).+ (rest.[1])].invoke(10 2 3) //15 `rest.@ b c[a.+ b.+ c].invoke(1 20 30) //エラー; rest.@に全ての引数が消費されるため `a rest.@[a.+ (rest.size)].invoke(1) //1 //rest.@が食う引数が無くてもエラーにはならない
*1:便宜上配列と言ってますが、実態はRangeです。