JS的展开语法是不是出现在其他语言中?
Posted
技术标签:
【中文标题】JS的展开语法是不是出现在其他语言中?【英文标题】:Does JS's spread syntax appear in other languages?JS的展开语法是否出现在其他语言中? 【发布时间】:2018-10-15 04:56:34 【问题描述】:我第一次遇到 javascript 中的传播 (...
) 语法,并逐渐欣赏 many things it can do,但我承认我仍然觉得它很奇怪。有没有其他语言的等价物,那里叫什么?
【问题讨论】:
Groovy 有一个扩展运算符:groovy-lang.org/operators.html#_spread_operator。但它的功能却大不相同。 准确地说,展开语法不是“运算符”。术语“运算符”在表达式语法中具有特定含义,扩展语法不是其中的一部分。 Go language 允许将其作为实现可变参数函数的一种方式。我更喜欢它的形式,在“接收”位置(参数)中,...
位于类型标识之前,而在“发送”位置(参数)中,它位于值之后。 func foo(bar string, rest ...string) /***/
... foo("bar", myStrings...)
【参考方案1】:
是的,在 Ruby 中:splat 运算符。它是一个星号而不是三个点:
def foo(a, *b, **c)
[a, b, c]
end
> foo 10
=> [10, [], ]
> foo 10, 20, 30
=> [10, [20, 30], ]
> foo 10, 20, 30, d: 40, e: 50
=> [10, [20, 30], :d=>40, :e=>50]
> foo 10, d: 40, e: 50
=> [10, [], :d=>40, :e=>50]
(复制自this answer)
【讨论】:
我相信还有 python 和 perl。也使用星号。 JavaScript 是我所知道的唯一一种使用三个点而不是星号的语言...我认为这是因为 JavaScript already uses the asterisk somewhere else,但我不确定。【参考方案2】:Common Lisp 有&rest
参数:
(defun do-something (&rest params)
...
)
【讨论】:
但是你能在不使用apply
的情况下做(+ 1 2 3 ...params)
之类的事情吗,因为那样会很甜蜜。
@Meow 不,Lisp 没有。您可以使用反引号来处理数据:(1 2 3 ,@params)
,但不能使用函数参数。【参考方案3】:
php 也有它,使用三个点:它是new feature of PHP version 5.6。 运算符看起来像省略号 (...) 字符,但实际上不是。
【讨论】:
以上是关于JS的展开语法是不是出现在其他语言中?的主要内容,如果未能解决你的问题,请参考以下文章