tutorial react objects node convertir coffee javascript coffeescript

javascript - react - ¿Qué significa "Splats" en el tutorial de CoffeeScript?



node js (4)

Mirando este tutorial de CoffeeScript: http://jashkenas.github.com/coffee-script/

No veo muy bien para qué son los Splats. ¿Qué es esta construcción? De dónde viene (históricamente)


Creo que es un azúcar sintáctico para el objeto de argumentos de JavaScript.

La idea puede venir del operador splat de ruby * .


El término "operador de splat" proviene de Ruby, donde el carácter * (a veces llamado "splat" -vea la entrada Jargon File ) se usa para indicar que una entrada en una lista de argumentos debe "absorber" una lista de argumentos.

CoffeeScript adoptó splats de estilo Ruby desde el principio (ver el número 16 ), pero según la sugerencia de Douglas Crockford, la sintaxis se cambió de *x a x... un par de semanas después (véase el número 45 ). Sin embargo, CoffeeScripters todavía se refieren a la sintaxis como el "splat" o "operador splat".

En cuanto a lo que realmente hacen, los splats cortan el objeto de los arguments de tal manera que el argumento splatted se convierte en una matriz de todos los argumentos "adicionales". El ejemplo más trivial es

(args...) ->

En este caso, args simplemente será una copia de matriz de arguments . Los argumentos salpicados pueden venir antes, después o entre argumentos estándar:

(first, rest...) -> (rest..., last) -> (first, rest..., last) ->

En los primeros dos casos, si la función recibe 0-1 argumentos, el rest será una matriz vacía. En el último caso, la función necesita recibir más de 2 argumentos para que el rest no esté vacío.

Como 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 lidiar con números variables de argumentos.


Splats es el término para el uso del operador ... para var-args (funciones que toman una cantidad variable de argumentos).


si conoce Python, args... más o menos similar a *args , ya que le permite tratar los parámetros de la función como una lista

por ejemplo:

concat = (args...) -> args.join('', '') concat(''hello'', ''world'') == ''hello, world'' concat(''ready'', ''set'', ''go!'') == ''ready, set, go!''

también funciona en los complementos:

[first, rest...] = [1, 2, 3, 4] first == 1 rest == [2, 3, 4]