O termo "operador splat" vem do Ruby, onde o *
caractere (às vezes chamado de "splat" - consulte a entrada Jargon File ) é usado para indicar que uma entrada em uma lista de argumentos deve "absorver" uma lista de argumentos.
CoffeeScript adotou splats no estilo Ruby muito cedo (consulte a edição 16 ), mas por sugestão de Douglas Crockford, a sintaxe foi alterada *x
para x...
algumas semanas depois (consulte a edição 45 ). Mesmo assim, os CoffeeScripters ainda se referem à sintaxe como "operador splat" ou "splat".
Quanto ao que eles realmente fazem, os splats cortam o arguments
objeto de tal forma que o argumento splat torna-se um array de todos os argumentos "extras". O exemplo mais trivial é
(args...) ->
Nesse caso, args
será simplesmente uma cópia do array arguments
. Os argumentos divididos podem vir antes, depois ou entre os argumentos padrão:
(first, rest...) ->
(rest..., last) ->
(first, rest..., last) ->
Nos primeiros dois casos, se a função receber 0-1 argumentos, rest
será um array vazio. No último caso, a função precisa receber mais de 2 argumentos para rest
não ficar vazia.
Uma vez que o JavaScript não permite várias assinaturas para funções com o mesmo nome (como fazem C e Java), os splats economizam muito tempo para lidar com vários números de argumentos.
arguments
+call
: stackoverflow.com/questions/17380315/…