CoffeeScript中的缺点(:)?

时间:2016-07-29 19:15:18

标签: list haskell coffeescript

Haskell提供:函数来将项目添加到列表中:

*Main> :t (:)
(:) :: a -> [a] -> [a]

示例:

*Main> 1 : 2 : 3 : []
[1,2,3]

CoffeeScript是否存在这样的函数/运算符?

2 个答案:

答案 0 :(得分:1)

据我所知,CoffeeScript没有实现类似Haskell的列表。 最接近的方法/函数是Array unshift method

但是,Haskell cons函数会在保留原始列表的同时创建 new 列表,而Array.unshift会修改现有数组,因此它们实际上并不相同 的事情。

CoffeeScript中有许多链接列表实现,例如:

但我没有看到CoffeeScript原生支持的任何内容。

答案 1 :(得分:1)

我是第二个本地unshift方法 - 虽然它会返回结果数组的长度,不是数组本身,所以你不能像你的例子那样链接调用建议。

作为一种有趣的替代方案,CoffeeScript's ranges feature allows splicing,可用于在现有数组前添加值:

array = [ 1, 2, 3 ]

array[..0] = [ 4, array[0] ]

console.log array # [ 4, 1, 2, 3 ]

更确切地说,它删除了数组的第一个元素,并在赋值的右侧添加了两个元素(您想要的前置和原始的0值)。

我们甚至可以通过将它包装在括号中并引入数组的引用变量来链接它:

array = [ 1, 2, 3 ]

(( array[..0] = [ 4, array[0] ] ) and array).unshift(5)

console.log array # [ 5, 4, 1, 2, 3 ]