web-dev-qa-db-fra.com

Comment passer deux fonctions anonymes comme arguments dans 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 facile 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.

55
glortho

Mettez des parenthèses autour des fonctions anonymes.

24
Joe Cheng

Je pense que le problème réside dans l'utilisation des commentaires sur une seule ligne //. Commentaires sur une seule ligne entre /* .. */ semble bien fonctionner. Voici un exemple équivalent avec autre chose qu'un commentaire.

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

Ou avec des commentaires en utilisant /* .. */.

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

Vous pouvez essayer ces exemples sous l'onglet Try CoffeeScript . CoffeeScript ajoute une instruction return pour renvoyer la dernière expression de la fonction. Si vous vouliez des fonctions simples qui ne font rien et ne contiennent pas de return à la fin, essayez:

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

Une autre façon consiste à utiliser 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
21
kevinhyunilkim

Sans parenthèses ni barre oblique inverse:

f ->
  0
, ->
  1

Sortie sur 1.7.1:

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