Skip to content
class method

Enumerator::Lazy.new

[out Elem, out Return = void] (?::Integer arg0) { (::Enumerator::Yielder arg0) -> Return } -> ::Enumerator::Lazy[Elem, Return]
Lazy.new(obj, size=nil) { |yielder, *values| block }

Creates a new Lazy enumerator. When the enumerator is actually enumerated (e.g. by calling force), obj will be enumerated and each value passed to the given block. The block can yield values back using yielder. For example, to create a “filter+map” enumerator:

Example
def filter_map(sequence)
  Lazy.new(sequence) do |yielder, *values|
    result = yield *values
    yielder << result if result
  end
end

filter_map(1..Float::INFINITY) {|i| i*i if i.even?}.first(5)
#=> [4, 16, 36, 64, 100]
See also #chunk #chunk_while also in 4.1 · 3.4 · 3.3 · 3.2 · 3.1 · 3.0