loop do
i = enumerator.next
puts i
# `loop` silently rescues StopIteration
end
Slide 14
Slide 14 text
Generator
Slide 15
Slide 15 text
fibonacci = Enumerator.new(Float::INFINITY) do |yielder|
a, b = 0, 1
loop do
yielder.yield a
a, b = b, (a + b)
end
end
Slide 16
Slide 16 text
class SumOfNaturalNumbers < Enumerator
def initialize
super(Float::INFINITY) do |yielder|
n = 1
loop do
yielder.yield (n * (n + 1)) / 2
n += 1
end
end
end
end
Slide 17
Slide 17 text
def fibonacci
a, b = 0, 1
loop do
yield a
a, b = b, (a + b)
end
end
enumerator = enum_for(:fibonacci)
# => #