Changes in new versions / Ruby 2.0

# *** before: ***
# select walks the WHOLE receiver before first can return anything,
# so it never finishes on an infinite range
# old = (1..Float::INFINITY).select { |n| n.even? }.first(3)

# *** in version 2.0: ***
lazy = (1..Float::INFINITY).lazy.select { |n| n.even? }.first(3)

puts lazy.inspect   # [2, 4, 6], only as many elements as needed are computed