Réponses:
Je pense que c'est une convention utile pour que les rappels soient le dernier argument d'une fonction. C'est généralement le cas avec l'API Node.js, par exemple. Donc, avec cela à l'esprit:
delay = (ms, func) -> setTimeout func, ms
delay 1000, -> something param
Certes, cela ajoute la surcharge d'un appel de fonction supplémentaire à chaque que setTimeout
vous faites; mais dans les interpréteurs JS d'aujourd'hui, l'inconvénient des performances est insignifiant à moins que vous ne le fassiez des milliers de fois par seconde. (Et que faites-vous en définissant des milliers de délais d'attente par seconde, de toute façon?)
Bien sûr, une approche plus simple consiste à simplement nommer votre rappel, ce qui tend à produire un code plus lisible de toute façon (jashkenas est un grand fan de cet idiome):
callback = -> something param
setTimeout callback, 1000
setTimeout ( ->
something param
), 1000
Les parenthèses sont facultatives, mais commencer la ligne par une virgule m'a semblé compliqué.
setTimeout
et la paren d'ouverture est important. L'espace signifie que les parenthèses entourent la fermeture comme premier paramètre de setTimeout; si c'était directement après le t, alors coffescript s'attendrait à ce que les parenthèses entourent les deux paramètres.
setTimeout ->
something param
, 1000
something param
est sur la même ligne que setTimeout
, il est analysé différemment.
Cela se traduira par une traduction à peu près équivalente (merci @Joel Mueller):
setTimeout (-> something param), 1000
Notez que ce n'est pas une traduction exacte car la fonction anonyme renvoie le résultat de l'appel something(param)
au lieu d'undefined, comme dans votre extrait de code.
setTimeout (() -> something param), 1000
Je trouve que c'est la meilleure méthode pour faire de même,
setTimeout (-> alert "hi"), 1000