0

Coffeescriptのオプションの括弧は、構文のあいまいさをもたらすことに気づきました。たとえば、コード

prompt Math.max(2), 3      # no space after max

にコンパイルします

prompt(Math.max(2), 3);    // one parameter to max(), two to prompt()

一方

prompt Math.max (2), 3     # space after max

にコンパイルします

prompt(Math.max(2., 3));    // two parameters to max(), one to prompt()

つまり、パラメータリストの前にスペースを追加すると、パラメータのグループ化が変更されます。

これは意図的なものですか?スペースが構文上の違いを生む言語の他の場所はありますか?

4

2 に答える 2

1

はい、それは意図的なものです。

CofeeScriptの変数の後のスペースは、次のことを意味します。「この関数に次の引数のリストを適用します。

あなたのコードを見てみましょう:

prompt Math.max(2), 3

promptこれは、「 2つの引数に適用する:Math.max(2)と」を意味します3

prompt Math.max (2), 3

これは、「Math.max2つの引数に適用する:(2)3、そして結果をprompt」に適用することを意味します。

より複雑な例を見てみましょう。

my_function (obj = other_function 1, 2), some_var

この例では、ブラケットが必要です。

この機能を使用すると、2つの方法で同じコードを記述できます。

my_function (my_array.map (x) -> do_smth x), some_var

と同じです

my_function my_array.map((x) -> do_smth x), some_var

スペースが構文上の違いを生む言語の他の場所については知りません。しかし、角かっこが違いを生む場所があります。

my_object = one: two: three: 'three', four: 'four'
=>
my_object = {one: {two: {three: 'three', four: 'four'}}}

my_object = one: {two: three: 'three'}, four: 'four'
=>
my_object = {one: {two: {three: 'three'}, four: 'four'}}
于 2012-09-20T13:17:21.723 に答える
1

括弧は、例ではまったく異なることを意味します。

prompt Math.max(2), 3

maxここでは、唯一の引数を使用して関数を呼び出します2。括弧は関数呼び出しの一部です。maxこの議論で呼ばれることは明らかです。

prompt Math.max (2), 3

この場合、括弧は (2)の一部であり、に簡略化され2ます。関数呼び出しのオプションの括弧は省略します。

それで、これは意図的なものですか?はい、私はそう言うでしょう、異なる解釈の余地はあまりありません。詳細については、コーヒースクリプトスタイルガイドがあります。関数名とその括弧の間にスペースがあってはならないことは明示的には述べられていませんが、すべての例はそのように書かれています。

于 2012-09-20T13:17:39.263 に答える