Ибо это просто синтаксический сахар.
Для ... В
Ранее мы говорили, что единственные встроенные циклические примитивы Ruby были while и before. Что это за вещь "для", тогда? Ну, это почти кусок синтаксического сахара. Когда вы пишете
for aSong in songList
aSong.play
end
Руби переводит это как-то так:
songList.each do |aSong|
aSong.play
end
Единственная разница между циклом for и каждой формой - это область действия локальных переменных, определенных в теле. Это обсуждается на странице 87.
Вы можете использовать для перебора любого объекта, который отвечает на метод каждого, например, Array или 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
производит:
fee fi fo fum 1 2 3 second third
Пока ваш класс определяет разумный каждый метод, вы можете использовать цикл 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
В Ruby нет других ключевых слов для понимания списка (например, приведенный выше пример суммы). for
не очень популярное ключевое слово, и синтаксис метода (arr.each {}
) обычно предпочтительнее.