Tutorial by Examples

Let's create an Enumerator for Fibonacci numbers. fibonacci = Enumerator.new do |yielder| a = b = 1 loop do yielder << a a, b = b, a + b end end We can now use any Enumerable method with fibonacci: fibonacci.take 10 # => [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
If an iteration method such as each is called without a block, an Enumerator should be returned. This can be done using the enum_for method: def each return enum_for :each unless block_given? yield :x yield :y yield :z end This enables the programmer to compose Enumerable operati...
Use rewind to restart the enumerator. ℕ = Enumerator.new do |yielder| x = 0 loop do yielder << x x += 1 end end ℕ.next # => 0 ℕ.next # => 1 ℕ.next # => 2 ℕ.rewind ℕ.next # => 0

Page 1 of 1