CoffeeScript 教程中的“Splats”是什么意思?

2022-08-30 05:29:36

看看这个咖啡脚本教程:http://jashkenas.github.com/coffee-script/

我不太明白Splats是做什么的。这是什么结构?它来自哪里(历史上)


答案 1

术语“splat运算符”来自Ruby,其中字符(有时称为“splat”,请参阅Jargon File条目)用于指示参数列表中的条目应该“吸收”参数列表。*

CoffeeScript很早就采用了Ruby风格的splats(见第16期),但在Douglas Crockford的建议下,语法从几周后发生了变化(见第45期)。尽管如此,CoffeeScripters仍然将语法称为“splat”或“splat运算符”。*xx...

至于它们实际做了什么,splats以这样的方式切割对象,即splated参数成为所有“额外”参数的数组。最微不足道的例子是arguments

(args...) ->

在本例中,将只是 的数组副本。溅射参数可以位于标准参数之前、之后或之间:argsarguments

(first, rest...) ->
(rest..., last) ->
(first, rest..., last) ->

在前两种情况下,如果函数接收到 0-1 个参数,则将是一个空数组。在最后一种情况下,函数需要接收超过 2 个参数才能为非空。restrest

由于JavaScript不允许对具有相同名称的函数进行多个签名(就像C和Java所做的那样),因此splats可以节省大量时间来处理不同数量的参数。


答案 2

如果您了解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]