Ruby 带括号和splat运算符的并行赋值
我明白了:Ruby 带括号和splat运算符的并行赋值,ruby,parallel-assignment,Ruby,Parallel Assignment,我明白了: x,(y,z)=1,*[2,3] x # => 1 y # => 2 z # => nil 我想知道为什么z的值为nil x, (y, z) = 1, *[2, 3] 右侧的splat*是内联扩展的,因此它相当于: x, (y, z) = 1, 2, 3 x = 1 y, z = 2 左侧带括号的列表被视为嵌套赋值,因此它等效于: x, (y, z) = 1, 2, 3 x = 1 y, z = 2 3被丢弃,而z被分配到nil好答案。如果x,(y,z
x,(y,z)=1,*[2,3]
x # => 1
y # => 2
z # => nil
我想知道为什么z
的值为nil
x, (y, z) = 1, *[2, 3]
右侧的splat*
是内联扩展的,因此它相当于:
x, (y, z) = 1, 2, 3
x = 1
y, z = 2
左侧带括号的列表被视为嵌套赋值,因此它等效于:
x, (y, z) = 1, 2, 3
x = 1
y, z = 2
3
被丢弃,而z
被分配到nil
好答案。如果x,(y,z),u=1,*[2,3]
;y#=>2;z#=>零;u#=>3。好的,所以splat优先于parantesses,parantesses将其中的值视为一个单一的单位。我认为优先级在这里不相关,因为括号和splat位于等式的相反侧。关键是Yu的陈述,“右边的splat*
。”。并行分配导致x
设置为等于1
,(y,z)
设置为等于2
,依此类推,如果(y,z)=2
,则y#=>2;z#=>零
。
x, (y, z) = 1, *[2, 3]