查看此CoffeeScript教程:http://jashkenas.github.com/coffee-script/
我不太清楚Splats的用途。这是什么建筑?它来自哪里(历史上)
答案 0 :(得分:197)
术语“splat运算符”来自Ruby,其中*
字符(有时称为“splat”-see the Jargon File entry)用于指示参数列表中的条目应“浸泡” “一系列论据。
CoffeeScript很早就采用了Ruby样式的splats(参见issue 16),但在Douglas Crockford的建议下,几周之后语法从*x
变为x...
(参见issue 45)。尽管如此,CoffeeScripters仍然将语法称为“splat”或“splat operator”。
关于它们实际执行的操作,splats以这样的方式对arguments
对象进行切片,使得splatted参数成为所有“额外”参数的数组。最简单的例子是
(args...) ->
在这种情况下,args
只是arguments
的数组副本。 Splatted参数可以在标准参数之前,之后或之间出现:
(first, rest...) ->
(rest..., last) ->
(first, rest..., last) ->
在前两种情况下,如果函数接收0-1个参数,rest
将是一个空数组。在最后一种情况下,函数需要接收超过2个rest
的参数为非空。
由于JavaScript不允许具有相同名称的函数的多个签名(C和Java的方式),因此splats可以节省大量时间来处理不同数量的参数。
答案 1 :(得分:13)
如果你知道python,args...
大致类似于*args
,因为它允许你将函数参数视为列表
例如:
concat = (args...) -> args.join(', ')
concat('hello', 'world') == 'hello, world'
concat('ready', 'set', 'go!') == 'ready, set, go!'
它也适用于分页:
[first, rest...] = [1, 2, 3, 4]
first == 1
rest == [2, 3, 4]
答案 2 :(得分:6)
Splats是使用...
运算符用于var-args(带有可变数量参数的函数)的术语。
答案 3 :(得分:3)
我认为这是javascript参数对象的语法糖。
这个想法可能来自ruby的splat operator *
。