为了……在
之前我们说过,唯一内置的 Ruby 循环原语是 while 和 until。那么,这个“为”的东西是什么?好吧, for 几乎是一大堆语法糖。当你写
for aSong in songList
aSong.play
end
Ruby 将其翻译成如下内容:
songList.each do |aSong|
aSong.play
end
for 循环和 each 形式之间的唯一区别是在主体中定义的局部变量的范围。这在第 87 页进行了讨论。
您可以使用 for 迭代任何响应每个方法的对象,例如数组或范围。
for i in ['fee', 'fi', 'fo', 'fum']
print i, " "
end
for i in 1..3
print i, " "
end
for i in File.open("ordinal").find_all { |l| l =~ /d$/}
print i.chomp, " "
end
产生:
fee fi fo fum 1 2 3 second third
只要你的类定义了一个明智的 each 方法,你就可以使用 for 循环来遍历它。
class Periods
def each
yield "Classical"
yield "Jazz"
yield "Rock"
end
end
periods = Periods.new
for genre in periods
print genre, " "
end
产生:
Classical Jazz Rock