所以,通过一些功能性的&作为它的驱动程序。我看到这种splat使用的惯例,虽然我可以“看到”它在编译的javascript中做了什么,但我还没有看到任何提及这是文档等...在“。 ..“在行尾用于咖啡的splat用法(见下文)。
例如,我们有:
flip = (f) -> (as...) -> f as.reverse()...
编译为:
flip = function(f) {
return function() {
var as;
as = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
return f.apply(null, as.reverse());
};
};
现在,我知道“as ...”被用作:
as = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
获取参数并将它们分配给“as”。
但是,我没有把头包裹起来就是这里的用法:
-> f as.reverse()... # <-- the "..." at the end.
如果我删除它('...'),那么编译的“apply”就会消失。那么,最后使用“...”的惯例是什么。我在coffeescript知识中错过了这个概念。
答案 0 :(得分:4)
...
在行尾没什么特别的。
你在这里看到的是splat参数和splat参数之间的区别。 ...
运算符用于两种情况,因为它们是相关的。但是,这可能会令人困惑,因为这些用途是彼此相反的。
as.reverse()...
是传递给f
的splat参数。已编译的JavaScript使用f.apply
将as.reverse()
分解为接收方f
的多个参数。
as...
是一个splat参数。已编译的JavaScript使用__slice
将arguments
对象转换为接收器内的数组,以将参数收集到单个列表中。