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的展开语法是不是出现在其他语言中?的主要内容,如果未能解决你的问题,请参考以下文章

json

正则表达式语法

你不知道的js-混合对象-类

yaml基本语法

ES6 class类中定义私有变量

Python语法基础