×

ruby · level 3 · unit 3 · lesson 2

  1. meet it
  2. guess first
  3. your turn
  4. fix it
  5. nailed it

Tap a green word if you get lost.

meet it

Enumerator.new builds a that makes values on demand.

Not every sequence lives in an array. Order numbers, Fibonacci numbers and timetable slots can be worked out one at a time. Enumerator.new builds a generator: you write a block that produces values, and the caller pulls as many as it wants with next or first.

The block gets a , usually called y. Each y << value hands one value to whoever is asking, then pauses the block right there until another value is wanted. That is why loop do inside a generator is safe: it only runs as far as someone pulls.

order_numbers = Enumerator.new do |y|
  number = 1000
  loop do
    y << "ORD-#{number}"
    number += 1
  end
end
puts order_numbers.next
puts order_numbers.next
p order_numbers.first(3)

first always starts from the beginning, while next carries on from its own bookmark.