web-dev-qa-db-ja.com

CoffeeScriptで引数として2つの匿名関数を渡す方法は?

次のように、jQueryのホバーの引数として2つの匿名関数を渡します。

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

たった1つで簡単です– hover -> –しかし、CoffeeScriptの2つの適切な構文は何ですか?私は試した ...hover ->...hover( ->...などですが、上記の構造は得られません。

55
glortho

無名関数を括弧で囲んでください。

24
Joe Cheng

問題は、単一行コメント//の使用にあると思います。 /* .. */で囲まれた単一行コメントは正常に機能するようです。これは、コメント以外のものを使用した同等の例です。

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

または、/* .. */を使用したコメント付き。

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

Try CoffeeScript タブでこれらの例を試すことができます。 CoffeeScriptは、関数の最後の式を返すreturnステートメントを追加します。何もせず、最後にreturnを含まない必要最小限の関数が必要な場合は、次のことを試してください。

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

もう1つの方法は、呼び出し元の関数の後にbackslashを使用することで、コンマを正しくインデントする必要があります。

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

括弧またはバックスラッシュなし

f ->
  0
, ->
  1

1.7.1の出力:

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