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| ... }
enumerator.c
View on GitHub ↗
static VALUE
enumerator_initialize(int argc, VALUE *argv, VALUE obj)
{
VALUE iter = rb_block_proc();
VALUE recv = generator_init(generator_allocate(rb_cGenerator), iter);
VALUE arg0 = rb_check_arity(argc, 0, 1) ? argv[0] : Qnil;
VALUE size = convert_to_feasible_size_value(arg0);
return enumerator_init(obj, recv, sym_each, 0, 0, 0, size, false);
}
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