2012-03-13 21 views
2

Coffeescriptは、関数呼び出しのカッコを設定または省略する自由を与えます。同様関数呼び出しのCoffeescriptカッコ

alert 'Hi folks' 
alert ('Hi folks') 

が等しい。

私は、次のようなステートメントにカッコを追加することが可能な場合は、おそらく、coffeescript、その構文、および物事を単純に保つことの不十分な経験のために疑問に思っています。 私は彼らが必要でないことを知っています

define (require) -> 
    return 'goodbye' 

編集:私は、私はこの構文を想定するよりも、警告文のと同じように括弧を設定するオプションを適用すると、最終的なjsファイルにすべての違いを作るべきではありません。

define ((require) -> 
    return 'goodbye' 
) 
+0

あなたは括弧で最後の文を追加することができますがあなたが望む方法を追加しましたか?私はあなたが達成しようとしていることを理解していません。 –

答えて

3
define (require) -> 
    return 'goodbye' 

は、その最初の(そして唯一の)引数としての機能をdefineへの関数呼び出しであるJavaScriptコード

define(function(require) { return 'goodbye' }) 

に相当するであろう。あなたが質問したときにスニペットが期待していたものではないでしょう。

私がCoffeeScriptで遊んだときに非常に役立つものは、the CoffeeScript websiteのオンライン「try CoffeeScript」ダイアログで試してみることでした。これにより、特定のスニペットがコンパイルされたJavaScriptを確認し、すぐにどのような効果が現れるかを確認することができます。結果のJavaScriptコードに括弧を追加するかインデントを変更します。私は間違いなくそれを行うことをお勧めします。

はい、機能((require) -> return 'goodbye')の周りに括弧を追加することが有効であり、かつ動作を変更しません:-)

編集は、問題の編集が反映されます。ただし、 "foo (bar)"と "foo(bar)"はパーサによって異なる方法で解析されます。前者では、かっこが優先度(優先度、「正規のかっこ」)を表し、後者では関数呼び出しのカッコです。

"foo bar"、 "foo(bar)"、 "foo (bar)" はすべて同じことを行うが、 "foo bar, baz" と "foo(bar, baz)" 作業罰金のに対し、 "foo (bar, baz)は、" 構文エラーです。

+0

Thx。実際にこれは私が探しているものです。単純なパラメータであるかのように無名関数をラップすることが可能ならば、私は単に興味があります。 – SunnyRed

+0

更新用Thx +追加情報要約すると、上記のようなケースでは、括弧は最終出力に影響を与えます: 'define((function(require){return 'goodbye';}))'。アラートのように単純なパラメータを指定していても、そうではありませんか? – SunnyRed

+0

@SunnyRed:定義と同じように、アラートにも大きな影響を与えます。それは単に "prioity括弧"であり、 "function call parentheses"ではありません。関数と左括弧の間に空白がない場合、関数呼び出し構文の一部として解釈されます。 – FireFly

1

はい、括弧内に無名関数をラップすることができます。

この単純なスクリプトを実行しました。

test.coffee

define = (func) -> func() 

console.log define ((require) -> 
    return 'goodbye' 
) 

出力:

goodbye 
関連する問題