ruby – 块变量中的括号
发布时间:2020-12-16 22:57:54 所属栏目:百科 来源:网络整理
导读:特定 a = [[:a,:b,:c]] 1)我理解这一点 a.each{|(x,y),z| p z} # = :b 有两个变量(x,y)和z,所以第三个元素:c被抛弃,z匹配:b.我理解这一点 a.each{|(x,z| p y} # = nil (x,y)匹配:a,因为它不是数组,所以没有元素,因此y匹配nil. 但是怎么做 a.each{|(x,z| p
特定
a = [[:a,:b,:c]] 1)我理解这一点 a.each{|(x,y),z| p z} # => :b 有两个变量(x,y)和z,所以第三个元素:c被抛弃,z匹配:b.我理解这一点 a.each{|(x,z| p y} # => nil (x,y)匹配:a,因为它不是数组,所以没有元素,因此y匹配nil. 但是怎么做 a.each{|(x,z| p x} # => :a 工作?我希望能返回nil. 2)为什么返回值是这样的? a.each{|(x,y)| p x} #=> :a a.each{|(x,y)| p y} #=> :b 我希望他们都能归零. 解决方法
这是因为并行赋值的语法.
a = [[:a,:c]] 所以a.each只有一个要迭代的元素,即[:a,:b,:c]. 在第一种情况下: (x,z = [:a,:c] #=> x == :a,y == nil,z == :b 这里(x,y)是一个匹配第一个元素的数组:a,x得到它,然后z只是匹配第二个元素:b. 在第二种情况下: (x,y) = [:a,y == :b 这里(x,y)作为整个数组匹配数组[:a,: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,b == 2 对于上面的任何情况,它只是最好地猜测应该采取什么. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |