letters = ["a", "b", "c", "d", "e"]
first, *second = letters
first # => "a"
second # => "["b", "c", "d", "e"]
Run Code Online (Sandbox Code Playgroud)
我明白这会产生什么,但无法理解这一点。这基本上是 Ruby 的魔法吗?无法想到任何其他编程语言可以支持使用 splat 运算符进行这种类型的赋值。
我认为它基本上创建了一个数组。看下面的例子:
> *foo = 1
> foo
=> [1]
Run Code Online (Sandbox Code Playgroud)
所以这里*second将创建一个数组并从中提取所有元素letters[1..-1]。否则它只会将letters[1],分配"b"给second变量。
我确信有人会提出更好的解释,但基本思想就在这里。
有关splat 运算符的更多信息。