Respuestas:
Creo que es una convención útil para las devoluciones de llamada como el último argumento para una función. Este suele ser el caso con la API Node.js, por ejemplo. Así que con eso en mente:
delay = (ms, func) -> setTimeout func, ms
delay 1000, -> something param
Por supuesto, esto agrega la sobrecarga de una llamada de función adicional a cada setTimeout
uno que realiza; pero en los intérpretes JS de hoy, el inconveniente del rendimiento es insignificante a menos que lo esté haciendo miles de veces por segundo. (¿Y qué haces configurando miles de tiempos de espera por segundo, de todos modos?)
Por supuesto, un enfoque más directo es simplemente nombrar su devolución de llamada, que de todos modos tiende a producir un código más legible (jashkenas es un gran admirador de este idioma):
callback = -> something param
setTimeout callback, 1000
setTimeout ( ->
something param
), 1000
Los paréntesis son opcionales, pero comenzar la línea con una coma me pareció complicado.
setTimeout
y el par de apertura es importante. El espacio allí significa que los paréntesis rodean el cierre como el primer parámetro para establecerTimeout; si fue directamente después de t, entonces coffescript esperaría que los paréntesis encierren ambos parámetros.
setTimeout ->
something param
, 1000
something param
está en la misma línea que setTimeout
, se analiza de manera diferente.
Esto dará como resultado una traducción más o menos equivalente (gracias @ Joel Mueller):
setTimeout (-> something param), 1000
Tenga en cuenta que esta no es una traducción exacta porque la función anónima devuelve el resultado de la llamada en something(param)
lugar de indefinido, como en su fragmento.
setTimeout (() -> something param), 1000
Este es el mejor método para hacer lo mismo.
setTimeout (-> alert "hi"), 1000