Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
coffeescript中的可选括号_Coffeescript - Fatal编程技术网

coffeescript中的可选括号

coffeescript中的可选括号,coffeescript,Coffeescript,我注意到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)); // two parameters to max(), one to prompt() 鉴于 prompt Math.m

我注意到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));    // two parameters to max(), one to prompt()
鉴于

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

prompt(Math.max(2), 3);    // one parameter to max(), two to prompt()
prompt(Math.max(2., 3));    // two parameters to max(), one to prompt()
即,在参数列表更改参数分组之前添加空格


这是故意的吗?在语言中,还有其他地方空格会造成句法上的差异吗?

是的,它是有意的

CofeeScript中变量后面的空格表示:“将以下参数列表应用于此函数

让我们看看您的代码:

prompt Math.max(2), 3
它的意思是:“应用于
prompt
两个参数:
Math.max(2)
3

它的意思是:“应用于
Math.max
两个参数:
(2)
3
,然后将结果应用于
提示符

让我们看一个更复杂的例子:

my_function (obj = other_function 1, 2), some_var
在这个例子中,括号是必要的

此功能允许您以两种方式编写相同的代码:

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'}}}


在您的示例中,括号表示完全不同的内容

prompt Math.max(2), 3
在这里,您使用唯一的参数
2
调用
max
函数。括号是函数调用的一部分。很明显,将使用此参数调用
max

prompt Math.max (2), 3
在这种情况下,括号是表达式
(2)
的一部分,该表达式将简化为
2
。省略函数调用的可选括号


那么,这是故意的吗?是的,我想说,没有太多的空间进行不同的解释。为了进一步参考,这里有一个。它没有明确提到函数名和括号之间不应该有空格,但所有的例子都是这样写的。

感谢样式指南链接。