这个与splat运算符的并行赋值如何在Ruby中工作?
letters = ["a", "b", "c", "d", "e"] first, *second = letters first # => "a" second # => "["b", "c", "d", "e"]
我明白这会产生什么,但无法理解这一点。 这基本上是Ruby魔术吗? 想不出任何其他编程语言会支持splat运算符的这种类型的赋值。
这在函数式语言中是很常见的,因此Ruby并不孤单。 您有一个项目列表,并希望它以head
和tail
分开,因此您可以对列表的第一个元素执行操作。
这也有效:
letters = ["a", "b", "c", "d", "e"] first, *middle, last = letters
在像Clojure这样的函数式语言中,您会看到如下内容:
(first '(1 2 3)) => 1 (rest '(1 2 3)) => (2 3)
我认为它基本上创建了一个数组。 请看以下示例:
> *foo = 1 > foo => [1]
所以这里*second
将创建一个数组并从letters[1..-1]
提取所有元素。 否则它只会为second
变量分配letters[1]
,即"b"
。
我相信有人会想出更好的解释,但基本的想法就在这里。
有关splat运算符的更多信息。
这是一个非常有趣的事情,这里详细描述了所有“魔法属性”
例如
a, *b, c = [1, 2, 3, 4, 5] a # => 1 b # => [2, 3, 4] c # => 5 a, (b, c) = [2,[2,[6,7]]] a => 2 b => 2 c => [6, 7]