我有一个A,一个长度为3的数组数组。例如,A=[[a1,b1,c3],[a2,b2,c2],[a3,b3,c3]、[a4,b4,c4]]。现在我正在循环如下:
A.each do |elem|
puts(elem[0].foo)
puts(elem[1].bar)
puts(elem[2].baz)
end
由于我在循环中使用了很多不同的属性,代码变得非常混乱和不可读。另外,本地名称elem[0]的描述性不强。有没有办法使用这样的东西?
A.each do |[a,b,c]|
puts(a.foo)
puts(b.bar)
puts(c.baz)
end
我对ruby很陌生,我真的不知道在哪里可以找到这样的东西。
它被称为去结构化(或Ruby文档中的分解(:
A.each do |(a,b,c)|
puts(a.foo)
puts(b.bar)
puts(c.baz)
end
如果元素数量未知,您也可以使用splat(*(来收集剩余元素:
[[1, 2, 3, 4], [5, 6, 7, 8]].each do |(first, *rest)|
puts "first: #{first}"
puts "rest: #{rest}"
end
[[1, 2, 3, 4], [5, 6, 7, 8]].each do |(first, *middle, last)|
puts "first: #{first}"
puts "middle: #{middle}"
puts "last: #{last}"
end