这种与 splat 运算符的并行赋值在 Ruby 中是如何工作的?

dar*_*mkd 5 ruby

letters = ["a", "b", "c", "d", "e"]
first, *second = letters
first  # => "a"
second # => "["b", "c", "d", "e"]
Run Code Online (Sandbox Code Playgroud)

我明白这会产生什么,但无法理解这一点。这基本上是 Ruby 的魔法吗?无法想到任何其他编程语言可以支持使用 splat 运算符进行这种类型的赋值。

Pie*_*ois 2

我认为它基本上创建了一个数组。看下面的例子:

> *foo = 1
> foo
 => [1]
Run Code Online (Sandbox Code Playgroud)

所以这里*second将创建一个数组并从中提取所有元素letters[1..-1]。否则它只会将letters[1],分配"b"second变量。

我确信有人会提出更好的解释,但基本思想就在这里。

有关splat 运算符的更多信息。