【发布时间】:2021-01-22 14:42:00
【问题描述】:
我有 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 很陌生,我真的不知道在哪里可以找到这样的东西。
【问题讨论】:
-
尝试
do |a,b,c|而不是do |[a,b,c]| -
谢谢,完美运行。出于好奇,这种东西叫什么?
-
多重赋值,包括ruby在内的几种语言都有这个功能
-
Ruby 文档将其称为array decomposition。请注意,数组的大小必须已知包含三个元素才能将块变量表示为
|a,b,c|。 -
@CarySwoveland 说了什么;但是,如果数组包含超过 3 个元素但
a和b是命令式的,则可以使用带有 splat (*) 运算符的数组分解,这样|a,b,*c|(习惯上使用 @987654331 @ 代替*c)。在这种情况下,a和b将是Array的第一个和第二个元素,*c将包含 0 个或多个标识其余Array的元素。
标签: arrays ruby-on-rails ruby each