Earlier we said that the only built-in Ruby looping primitives were
while
and
until
. What's this ``
for
'' thing, then?
Well,
for
is almost a lump of syntactic sugar. When you write
for aSong in songList
aSong.play
end
|
Ruby translates it into something like:
songList.each do |aSong|
aSong.play
end
|
The only difference between the
for
loop and the
each
form is the scope of local variables that are defined in the body.
This is discussed on page 87.
You can use
for
to iterate over any object that responds to the method
each
, such
as an
Array
or a
Range
.
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
|
produces:
fee fi fo fum 1 2 3 second third
|
As long as your class defines a sensible
each
method, you can use
a
for
loop to traverse it.
class Periods
def each
yield "Classical"
yield "Jazz"
yield "Rock"
end
end
periods = Periods.new
for genre in periods
print genre, " "
end
|
produces: