Как передать две анонимные функции в качестве аргументов в CoffeScript?

Я хочу передать две анонимные функции в качестве аргументов для jQuery hover, например:

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

Легко с одним - hover -> - но каков правильный синтаксис в CoffeeScript для двух? Я пробовал ...hover ->, ...hover( ->... и т.д., Но мне не удалось получить вышеуказанную структуру.

Ответ 1

Поместите скобки вокруг анонимных функций.

Ответ 2

Я думаю, что проблема заключается в использовании комментариев одиночной строки //. Однострочные комментарии, заключенные в /* .. */, как представляется, работают нормально. Вот эквивалентный пример с чем-то отличным от комментария.

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

Или с комментариями с помощью /* .. */.

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

Вы можете попробовать эти примеры на вкладке Try CoffeeScript. CoffeeScript добавляет оператор return, чтобы вернуть последнее выражение функции. Если вам нужны функции bare-bones, которые ничего не делают и не содержат return в конце, попробуйте:

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

Ответ 3

Другим способом является использование обратного слэша после функции вызова, запятая должна быть отступом правильно.

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

Ответ 4

Без скобок или обратной косой черты:

f ->
  0
, ->
  1

Выход на 1.7.1:

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