A lazy enumerator delays work until values are requested.

Lazy Enumerator

lazy_enumerator.rb
limit = 

values = (1..20).lazy
  .map do |number|
    number * 2
  end
  .select do |number|
    number % 3 != 0
  end
  .take(limit)
  .to_a

puts "limit=#{limit}"
puts "values=#{values.join(",")}"
limit = 

values = (1..20).lazy
  .map do |number|
    number * 2
  end
  .select do |number|
    number % 3 != 0
  end
  .take(limit)
  .to_a

puts "limit=#{limit}"
puts "values=#{values.join(",")}"
limit = 

values = (1..20).lazy
  .map do |number|
    number * 2
  end
  .select do |number|
    number % 3 != 0
  end
  .take(limit)
  .to_a

puts "limit=#{limit}"
puts "values=#{values.join(",")}"
lazy enumerator Lazy chains are useful when only a small number of results are needed.