Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 带括号和splat运算符的并行赋值_Ruby_Parallel Assignment - Fatal编程技术网

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]