
Untitled
By: a guest on
Aug 22nd, 2012 | syntax:
None | size: 0.98 KB | hits: 10 | expires: Never
# http://blog.railsware.com/2012/03/13/ruby-2-0-enumerablelazy/?utm_source=rubyweekly&utm_medium=email
a = [1,2,3,4,2,5].lazy.map{|x| x * 10 }.select{|x| x > 30 } #=> no evaluation
a.to_a #=> [40, 50], evaluation performed - no intermediate arrays generated
File.open("text"){|f| f.each.flat_map(&:split).grep(/ruby/) }
# It overrides several Enumerable methods (map, select, etc) with their lazy analogues
Prime.lazy.select{|x| x % 4 == 3 }.take(10).to_a
enum = [1, 2].each
puts enum.next #=> 1
puts enum.next #=> 2
puts enum.next #=> StopIteration exception raised
# custom enumerable
enum = Enumerator.new do |yielder|
yielder << 1
yielder << 2
end
module Enumerable
class Lazy < Enuerator
def initialize(obj)
super() do |yielder|
obj.each do |val|
block_given? yield(yielder, val) : yielder << val
end
end
end
def map
Lazy.new(self) do |yielder, val|
yielder << yield(val)
end
end
end
end