2012-07-28 18 views
6

En los documentos de CoffeeScript para array splicing, ¿cuál es el propósito del , _ref posterior?Empalme de matriz con coffeescript, ¿qué es _ref?

CoffeeScript:

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
numbers[3..6] = [-3, -4, -5, -6] 

compila en:

var numbers, _ref; 
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; 
[].splice.apply(numbers, [3, 4].concat(_ref = [-3, -4, -5, -6])), _ref; 

Respuesta

7

Eso es porque operación de corte de CoffeeScript quiere devolver el trozo que acaba asignado, pero splice(), devuelve los elementos eliminados en su lugar.

Por lo tanto, con el fin de lograr este objetivo, se compila la construcción en un fragmento de código que asigna el primer sector a un _ref variable local, a continuación, utiliza el comma operator para devolver esa variable después de llamar splice().

+0

+1 para el operador de enlace a coma, Douglas Crockford recomienda no usarlo, ya que puede conducir a "expresiones excesivamente difíciles", así que supongo que simplemente me olvidé de ello. Esto puede ser imposible de responder, pero ¿conoce la razón por la cual coffeeScript desea devolver el segmento que acaba de asignar, teniendo en cuenta que en este ejemplo, no es utilizado por nada ...? Gracias. – AJP

+2

@ AJP, probablemente porque puede generar el mismo fragmento de código ya sea que la persona que llama esté interesada o no en el valor devuelto. En otras palabras, "optimizar" 'ref' en el último caso puede no haber valido la complejidad adicional presentada en el compilador. –

Cuestiones relacionadas