El término "operador de splat" proviene de Ruby, donde el *carácter (a veces llamado "splat", ver la entrada del Archivo de jerga ) se usa para indicar que una entrada en una lista de argumentos debe "absorber" una lista de argumentos.
CoffeeScript adoptó símbolos de estilo Ruby desde el principio (ver número 16 ), pero por sugerencia de Douglas Crockford, la sintaxis se cambió de *xa x...un par de semanas más tarde (ver número 45 ). Sin embargo, CoffeeScripters todavía se refiere a la sintaxis como "splat" o "operador de splat".
En cuanto a lo que realmente hacen, los símbolos cortan el argumentsobjeto de tal manera que el argumento dividido se convierte en una matriz de todos los argumentos "adicionales". El ejemplo más trivial es
(args...) ->
En este caso, argsserá simplemente una copia de matriz de arguments. Los argumentos salpicados pueden aparecer antes, después o entre los argumentos estándar:
(first, rest...) ->
(rest..., last) ->
(first, rest..., last) ->
En los dos primeros casos, si la función recibe 0-1 argumentos, restserá una matriz vacía. En el último caso, la función necesita recibir más de 2 argumentos para restno estar vacía.
Dado que JavaScript no permite múltiples firmas para funciones con el mismo nombre (como lo hacen C y Java), los símbolos son un gran ahorro de tiempo para tratar con diferentes números de argumentos.
arguments+call: stackoverflow.com/questions/17380315/…