【发布时间】:2013-02-19 12:44:47
【问题描述】:
【问题讨论】:
标签: arrays coffeescript
【问题讨论】:
标签: arrays coffeescript
来自fine manual:
数组切片和范围拼接
范围也可用于提取数组切片。有两个点 (3..6),范围包括在内 (
3, 4, 5, 6);带有三个点 (3...6),范围不包括结尾 (3, 4, 5)。切片索引具有有用的默认值。省略的第一个索引默认为零,省略的第二个索引默认为数组的大小。
所以说array[..] 是:
len = array.length
array[0 .. len]
这只是对array 的浅拷贝。这意味着args = args[..] 只是制作了args 的本地浅拷贝,这样args 就可以在不改变传入的原始数组的情况下进行操作和更改,并且您可以存储对数组的引用而无需函数调用者能够通过传递给函数的原始 args 引用意外更改了您的数组。
考虑这个简化的例子:
f = (args) -> args = args[..]
这就变成了这个 JavaScript:
var f;
f = function(args) {
return args = args.slice(0);
};
还有Array#slice:
返回数组的一部分的浅拷贝。
[...]
如果省略end,则切片提取到序列的末尾。
所以说array.slice(n) 返回array 的浅表副本,从索引n 到array 的末尾,并且由于数组的索引从零开始,array.slice(0) 制作了整个索引的浅表副本数组。
【讨论】: