多迭代参数
multi_array.rb
你可能还记得在上一章中我们使用了一个带有多个循环变量的 for
循环。我们这样做是为了迭代一个多维数组。在每次进入 for
循环中,一个变量将被赋值为外层数组中的一行数据(子数组):
# Here multiarr is an array containing two "rows"
# (sub-arrays) at index 0 and 1
multiarr = [
['one','two','three','four'],
[1,2,3,4]
]
# This for loop runs twice (once for each "row" of multiarr)
for (a,b,c,d) in multiarr
print("a=#{a}, b=#{b}, c=#{c}, d=#{d}\n" )
end
上面的循环将会打印出:
a=one, b=two, c=three, d=four
a=1, b=2, c=3, d=4
我们可以使用 each
方法来迭代四个元素的数组,将四个“块参数” a
,b
,c
,d
传入 do
和 end
限定的块中:
multiarr.each do |a,b,c,d|
print("a=#{a}, b=#{b}, c=#{c}, d=#{d}\n" )
end
块参数(Block Parameters)
在 Ruby 中,迭代器的主体称为“块”(block),在块顶部的两个竖直线中声明的任何变量都称为“块参数”(block parameters)。在某种程度上,块的工作方式类似于函数(function),块参数的工作方式类似于函数的参数列表(argument list)。each
方法运行块(block)内的代码,并将集合(例如数组,multiarr
)提供的参数传递给块。在上面的示例中,each
方法重复地将有四个元素的数组传递给块,并且这四个数组内的元素初始化为四个块参数 a
,b
,c
,d
。除了迭代集合之外,块还可以用于其它方面。 我将在第 10 章中对块(block)进行更多说明。