coffeescript中的可选括号
我注意到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
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
。省略函数调用的可选括号
那么,这是故意的吗?是的,我想说,没有太多的空间进行不同的解释。为了进一步参考,这里有一个。它没有明确提到函数名和括号之间不应该有空格,但所有的例子都是这样写的。感谢样式指南链接。