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です。