Ruby 块变量中的括号
给定 1) 我明白这一点Ruby 块变量中的括号,ruby,arrays,ruby-1.9.3,parentheses,splat,Ruby,Arrays,Ruby 1.9.3,Parentheses,Splat,给定 1) 我明白这一点 a = [[:a, :b, :c]] a.each{|(x, y), z| p z} # => :b 有两个变量(x,y)和z,因此第三个元素:c被丢弃,并且z匹配:b。我明白这一点 a = [[:a, :b, :c]] a.each{|(x, y), z| p z} # => :b (x,y)匹配:a,因为它不是数组,所以它没有元素,因此y匹配nil 但是怎么做呢 a.each{|(x, y), z| p y} # => nil 工作?我希
a = [[:a, :b, :c]]
a.each{|(x, y), z| p z} # => :b
有两个变量(x,y)
和z
,因此第三个元素:c
被丢弃,并且z
匹配:b
。我明白这一点
a = [[:a, :b, :c]]
a.each{|(x, y), z| p z} # => :b
(x,y)
匹配:a
,因为它不是数组,所以它没有元素,因此y
匹配nil
但是怎么做呢
a.each{|(x, y), z| p y} # => nil
工作?我希望返回nil
2) 为什么返回值是这样的
a.each{|(x, y), z| p x} # => :a
我希望它们都返回nil,这是因为并行赋值的语法 因此,
a.每个
只有一个元素需要迭代,即[:a,:b,:c]
在第一种情况下:
a = [[:a, :b, :c]]
这里(x,y)
是一个数组,用于匹配第一个元素:a
,并且x
获取它,然后z
仅匹配第二个元素:b
在第二种情况下:
(x, y), z = [:a, :b, :c]
#=> x == :a, y == nil, z == :b
这里(x,y)
作为一个完整的数组匹配数组[:a,:b,:c]
,因此x
和y
分别获得:a
和:b
这就像需要“args+可选args(关键字args)+rest args”组合匹配提供的参数一样。按顺序接受参数就足够聪明了
另一个聪明的例子:
(x, y) = [:a, :b, :c]
#=> x == :a, y == :b
在上述任何一种情况下,它都只需对应该采取的措施做出最佳猜测。好的,因此在第一种情况下,智能赋值发生两次,在第二部分,(x,y)=:a导致x=:a和y=nil。我明白了,很好。我一直在使用它,却没有意识到它与并行分配有关。我还发现了一个称之为“解构”的博客。