Перечислитель как бесконечный генератор в Ruby
Я читаю один ресурс, объясняющий, как перечислители могут быть использованы в качестве генераторов, что в качестве примера:
triangular_numbers = Enumerator.new do |yielder|
number = 0
count = 1
loop do
number += count
count += 1
yielder.yield number
end
end
print triangular_numbers.next, " "
print triangular_numbers.next, " "
print triangular_numbers.next, " "
Я не понимаю цельyielder
здесь, какое значение оно принимает, и как этот код выполняется параллельно с остальным кодом программы.
Выполнение начинается сверху и приостанавливается, вероятно, когда блок «возвращает» значение в мой код.
Может кто-нибудь объяснить, как все это выполняется в глазах компилятора?