Skip to content

Preview Ruby 4.1 is a preview. It can change before the final release. Switch to Ruby 4.0 →

class method

Enumerator.new

[unchecked out E, out R = void] (?::Integer arg0) { (::Enumerator::Yielder arg0) -> R } -> ::Enumerator[E, R]
Enumerator.new(size = nil) {|yielder| ... }

Returns a new Enumerator object that can be used for iteration.

The given block defines the iteration; it is called with a “yielder” object that can yield an object via a call to method yielder.yield:

Example
fib = Enumerator.new do |yielder|
  n = next_n = 1
  while true do
    yielder.yield(n)
    n, next_n = next_n, n + next_n
  end
end

fib.take(10) # => [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

Parameter size specifies how the size is to be calculated (see size); it can either be a value or a callable object:

Example
Enumerator.new{}.size          # => nil
Enumerator.new(42){}.size      # => 42
Enumerator.new(-> {42}){}.size # => 42
See also .produce .product also in 4.0 · 3.4 · 3.3 · 3.2 · 3.1 · 3.0