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 *x
a 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 arguments
objeto 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, args
será 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, rest
será una matriz vacía. En el último caso, la función necesita recibir más de 2 argumentos para rest
no 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/…