我正在使用coffeescript(版本1.11.1),我遇到了一些我很难描述的东西。我只是试图通过一个字段对一组对象进行排序,我可以这样做:
data.sort (a,b) ->
if a.name < b.name then -1 else if a.name > b.name then 1 else 0
这会生成以下javascript:
data.sort(function(a, b) {
if (a.name < b.name) {
return -1;
} else if (a.name > b.name) {
return 1;
} else {
return 0;
}
});
真棒。但在我的第一次尝试中,我做了这个:
data.sort(a,b) ->
if a.name < b.name then -1 else if a.name > b.name then 1 else 0
生成的javascript就是:
data.sort(a, b)(function() {
if (a.name < b.name) {
return -1;
} else if (a.name > b.name) {
return 1;
} else {
return 0;
}
});
其中,因为javascript非常有用,所以无声地失败(至少在Chrome中)并导致周围的功能过早地返回。有点沮丧,但我会克服它。
首先,我想确认这是预期的行为。我想这可能是,我有一些模糊的想法在我的头骨周围蹦蹦跳跳,为什么会这样做,但我希望得到一个更坚定的理解。应该如何描述这个或该语言的这个特征与哪些术语相关?
答案 0 :(得分:4)
这是预期的行为。
CoffeeScript支持以下所有内容:
{em>函数的(a, b) -> 5
符号,
-> 5
符号表示没有参数的函数,
{em>函数调用的<{1}}符号和
{em>函数调用的<{1}}符号(隐含括号)。
那么如何使用函数参数f(a, b)
调用函数调用f a
的结果?
答案是 -
f(a, b)
- 正如你所注意到的,看起来与 -
相似-> 5
- 转换为调用f(a, b) -> 5
,将函数f (a, b) -> 5
作为参数传递。