Risposte:
Penso che sia una convenzione utile per i callback come ultimo argomento di una funzione. Questo di solito è il caso dell'API Node.js, ad esempio. Quindi con questo in mente:
delay = (ms, func) -> setTimeout func, ms
delay 1000, -> something param
Concesso, questo aggiunge l'overhead di una chiamata di funzione extra a tutti setTimeout
effettuata; ma negli interpreti JS di oggi, l'inconveniente delle prestazioni è insignificante a meno che non lo si faccia migliaia di volte al secondo. (E cosa stai facendo impostando migliaia di timeout al secondo, comunque?)
Naturalmente, un approccio più diretto è semplicemente nominare il callback, che tende comunque a produrre codice più leggibile (jashkenas è un grande fan di questo idioma):
callback = -> something param
setTimeout callback, 1000
setTimeout ( ->
something param
), 1000
Le parentesi sono opzionali, ma iniziare la riga con una virgola mi è sembrato disordinato.
setTimeout
e l'apertura iniziale è importante. Lo spazio lì indica che le parentesi circondano la chiusura come primo parametro a setTimeout; se fosse direttamente dopo la t, allora il coffescript avrebbe previsto che le parentesi racchiudessero entrambi i parametri.
setTimeout ->
something param
, 1000
something param
trova sulla stessa riga setTimeout
, viene analizzato in modo diverso.
Ciò si tradurrà in una traduzione approssimativamente equivalente (grazie a @Joel Mueller):
setTimeout (-> something param), 1000
Nota che questa non è una traduzione esatta perché la funzione anonima restituisce il risultato della chiamata something(param)
anziché non definito, come nel tuo frammento.
setTimeout (() -> something param), 1000
Trovo che questo sia il metodo migliore per fare lo stesso,
setTimeout (-> alert "hi"), 1000