多迭代参数

multi_array.rb

你可能还记得在上一章中我们使用了一个带有多个循环变量的 for 循环。我们这样做是为了迭代一个多维数组。在每次进入 for 循环中,一个变量将被赋值为外层数组中的一行数据(子数组):

  1. # Here multiarr is an array containing two "rows"
  2. # (sub-arrays) at index 0 and 1
  3. multiarr = [
  4. ['one','two','three','four'],
  5. [1,2,3,4]
  6. ]
  7. # This for loop runs twice (once for each "row" of multiarr)
  8. for (a,b,c,d) in multiarr
  9. print("a=#{a}, b=#{b}, c=#{c}, d=#{d}\n" )
  10. end

上面的循环将会打印出:

  1. a=one, b=two, c=three, d=four
  2. a=1, b=2, c=3, d=4

我们可以使用 each 方法来迭代四个元素的数组,将四个“块参数” abcd 传入 doend 限定的块中:

  1. multiarr.each do |a,b,c,d|
  2. print("a=#{a}, b=#{b}, c=#{c}, d=#{d}\n" )
  3. end

块参数(Block Parameters)

在 Ruby 中,迭代器的主体称为“块”(block),在块顶部的两个竖直线中声明的任何变量都称为“块参数”(block parameters)。在某种程度上,块的工作方式类似于函数(function),块参数的工作方式类似于函数的参数列表(argument list)。each 方法运行块(block)内的代码,并将集合(例如数组,multiarr)提供的参数传递给块。在上面的示例中,each 方法重复地将有四个元素的数组传递给块,并且这四个数组内的元素初始化为四个块参数 abcd。除了迭代集合之外,块还可以用于其它方面。 我将在第 10 章中对块(block)进行更多说明。