Подтвердить что ты не робот

Что такое "за" в Ruby

В Ruby:

for i in A do
    # some code
end

совпадает с:

A.each do |i|
   # some code
end

for не является методом ядра:

  • Что такое "for" в ruby ​​
  • Есть ли способ использовать другие ключевые слова для подобных действий?

Что-то вроде:

 total = sum i in I {x[i]}

отображение в:

 total = I.sum {|i] x[i]}
4b9b3361

Ответ 1

Это почти синтаксис сахара. Одно отличие состоит в том, что, хотя for будет использовать область кода вокруг него, each создает отдельную область внутри своего блока. Сравните следующее:

for i in (1..3)
  x = i
end
p x # => 3

против

(1..3).each do |i|
  x = i
end
p x # => undefined local variable or method `x' for main:Object

Ответ 2

for - это просто синтаксический сахар для метода each. Это можно увидеть, запустив этот код:

for i in 1 do
end

Это приводит к ошибке:

NoMethodError: undefined method `each' for 1:Fixnum

Ответ 3

Для просто синтаксического сахара.

Из кирка:

Для... В

Ранее мы говорили, что единственные встроенные примитивы Ruby looping были пока и до. Что это за "за"? Ну, это почти кусок синтаксического сахара. Когда вы пишете

for aSong in songList
  aSong.play
end

Ruby переводит его во что-то вроде:

songList.each do |aSong|
  aSong.play
end

Единственное различие между циклом for и каждой формой - это область локальных переменных, которые определены в теле. Это обсуждается на стр. 87.

Вы можете использовать для итерации по любому объекту, который отвечает на каждый метод, например массив или диапазон.

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 {}) обычно является предпочтительным.