55 votes

Comment passer deux fonctions anonymes en arguments dans CoffeScript?

Pardonnez la question newb CoffeeScript.

Je veux passer deux fonctions anonymes comme arguments pour le survol de jQuery, comme ceci:

 $('element').hover(
  function() {
    // do stuff on mouseover
  },
  function() {
    // do stuff on mouseout
  }
);
 

C'est simple avec un seul - hover -> - mais quelle est la syntaxe appropriée dans CoffeeScript pour deux? J'ai essayé ...hover -> , ...hover( ->... etc., mais rien ne me donne la structure ci-dessus.

52voto

Anurag Points 66470

Je pense que le problème est avec l'aide de la seule ligne de commentaires //. Les commentaires d'une ligne fermée en /* .. */ semblent bien fonctionner. Voici un équivalent exemple avec autre chose qu'un commentaire.

$('element').hover(
  -> console.log("first")
  -> console.log("second")
)

Ou avec commentaires à l'aide d' /* .. */.

$('element').hover(
  -> /* first */
  -> /* second */
)

Vous pouvez essayer ces exemples sous la Essayer CoffeeScript onglet. CoffeeScript ajoute une instruction return pour renvoyer la dernière expression de la fonction. Si vous voulais bare-bones fonctions qui ne font rien et ne contiennent return à la fin, essayez:

$('element').hover(
  () ->
  () ->
)
// $('element').hover(function() {}, function() {});

24voto

Joe Cheng Points 3417

Placez des parenthèses autour des fonctions anonymes.

21voto

kevin.h.kim Points 431

Une autre méthode consiste à utiliser une barre oblique inverse après la fonction appelant, la virgule doit être mise en retrait correctement.

 $('element').hover \
  -> # do stuff on mouseover
  ,
  -> # do stuff on mouseout
 

8voto

Ciro Santilli Points 3341

Sans parenthèses ni antislash:

 f ->
  0
, ->
  1
 

génère sur 1.7.1:

 f(function() {
  return 0;
}, function() {
  return 1;
});
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X