saw*_*awa 6 ruby arrays parentheses splat ruby-1.9.3
特定
a = [[:a, :b, :c]]
Run Code Online (Sandbox Code Playgroud)
1)我理解这一点
a.each{|(x, y), z| p z} # => :b
Run Code Online (Sandbox Code Playgroud)
有两个变量(x, y)和z,所以第三个元素:c是扔掉,和z比赛:b.我理解这一点
a.each{|(x, y), z| p y} # => nil
Run Code Online (Sandbox Code Playgroud)
该(x, y)匹配:a,并且由于它是不是一个数组,有到它没有元素,因此y相匹配nil.
但是怎么做
a.each{|(x, y), z| p x} # => :a
Run Code Online (Sandbox Code Playgroud)
工作?我希望nil能够回来.
2)为什么返回值是这样的?
a.each{|(x, y)| p x} #=> :a
a.each{|(x, y)| p y} #=> :b
Run Code Online (Sandbox Code Playgroud)
我希望他们都能回归nil.
Jin*_* Li 10
这是因为并行赋值的语法.
a = [[:a, :b, :c]]
Run Code Online (Sandbox Code Playgroud)
所以a.each只有一个要迭代的元素,即[:a,:b,:c].
在第一种情况下:
(x, y), z = [:a, :b, :c]
#=> x == :a, y == nil, z == :b
Run Code Online (Sandbox Code Playgroud)
这里(x,y)是一个匹配第一个元素的数组:a,x得到它,然后z只是匹配第二个元素:b.
在第二种情况下:
(x, y) = [:a, :b, :c]
#=> x == :a, y == :b
Run Code Online (Sandbox Code Playgroud)
这里(x,y)作为整个数组匹配数组[:a,:b,:c],所以x,y得到:a和:b相应.
这就像需要args +可选args(关键字args)+ rest args组合匹配提供的参数.只是"聪明"按顺序接受参数.
另一个聪明的例子
(a,b) = 1,2
=> [1, 2] # array match
#=> a == 1, b == 2
(a,b)=[1,2]
=> [1, 2] # array match
#=> a == 1, b == 2
Run Code Online (Sandbox Code Playgroud)
对于上面的任何情况,它只是最好地猜测应该采取什么.
| 归档时间: |
|
| 查看次数: |
1079 次 |
| 最近记录: |