2011-10-25 3 views
3

時間、プラス、マイナスの3つの関数があるとします。彼らは彼らの名前が示唆することをします。 CoffeeScriptの中に書かれたとき、それはだ、CoffeeScriptはどのように機能パラメータの優先順位を決定しますか?

times(plus(1,2) ,minus(5,2)); 

times plus 1,2 , minus 5,2 

とJavaScriptにコンパイルした後、それは次のようになります。

ものではありません
(function() { 
    times(plus(1, 2, minus(5, 2))); 
}).call(this); 

私たちは、その後、JavaScriptで次の行を作成します私たちは欲しい。これを解決するCoffeeScriptの方法はありますか?かっこを使用する必要がありますか?ありがとう、

+6

数学者として言えば、これはまさに括弧が最初に発明された理由です。 – Blazemonger

+3

Ruby、またはCoffeeScript、またはそれらを可能にする他の言語でブラケットレス関数呼び出しをネストしないでください。事実、これらは、構文エラーで救済する代わりに、ネストされた関数呼び出しの最も外側のものを除き、どこでも括弧を省略することを許してしまうという事実は、ひどい誤った機能です。 – millimoose

+0

@ Xi you ** **はかっこを使用できます。してください、してください、してください。あなたが括弧を避けなければならないCoffeeScriptを使用しているからではありません。 – brandizzi

答えて

9

私がmy bookで説明したように、暗黙のカッコにどのルールを使用するかをコンパイラが知る方法はありません。確かに、ケース

times plus 1,2, minus 5,2 

で、それはあなたがそれが

times(plus(1,2), minus(5,2)) 

を意味するようにしたいと思う人には自明だ。しかし、あなたはまた、

times 5, plus 1, parseInt str, 10 

を書いて、それを理解することを期待するかもしれません(そのまま)として

times(5, plus(1, parseInt(str, 10)) 

Th CoffeeScriptの暗黙のカッコのルールは非常に簡単です。式の最後に移動します。例えば、数学的表現の前に常にMath.floorをつけることができます。

文章上の問題として、私は一般に、行の最初の関数呼び出しのために括弧を省略するだけで、潜在的な混乱を避けています。つまり、私はあなたの例を書いています。

times plus(1,2), minus(5,2) 

いいえ、正しくですか?

times (plus 1, 2), (minus 5, 2) 

+0

+1 "私は一般的に、行の最初の関数呼び出しのために括弧を省略するだけで、混乱を避けることができます。 – KFL

+0

引数の解釈があいまいであるときにCoffeeLintが警告することを願っています。 – KFL

5

「通常の」関数呼び出しの括弧の代わりに、次のような、機能のためにのみ優先ためコールと括弧を括弧レススタイルを使用することができますもちろん、それは味の問題です。 times plus(1, 2), minus(5, 2)バージョンも同様に機能します。

関連する問題