Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Aug 22nd, 2012  |  syntax: None  |  size: 0.98 KB  |  hits: 10  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. # http://blog.railsware.com/2012/03/13/ruby-2-0-enumerablelazy/?utm_source=rubyweekly&utm_medium=email
  2. a = [1,2,3,4,2,5].lazy.map{|x| x * 10 }.select{|x| x > 30 } #=> no evaluation
  3. a.to_a #=> [40, 50], evaluation performed - no intermediate arrays generated
  4.  
  5. File.open("text"){|f| f.each.flat_map(&:split).grep(/ruby/) }
  6.  
  7. # It overrides several Enumerable methods (map, select, etc) with their lazy analogues
  8.  
  9. Prime.lazy.select{|x| x % 4 == 3 }.take(10).to_a
  10.  
  11. enum = [1, 2].each
  12. puts enum.next #=> 1
  13. puts enum.next #=> 2
  14. puts enum.next #=> StopIteration exception raised
  15.  
  16. # custom enumerable
  17. enum = Enumerator.new do |yielder|
  18.   yielder << 1
  19.   yielder << 2
  20. end
  21.  
  22. module Enumerable
  23.   class Lazy < Enuerator
  24.     def initialize(obj)
  25.       super() do |yielder|
  26.         obj.each do |val|
  27.           block_given? yield(yielder, val) : yielder << val
  28.         end
  29.       end
  30.     end
  31.     def map
  32.       Lazy.new(self) do |yielder, val|
  33.         yielder << yield(val)
  34.       end
  35.     end
  36.   end
  37. end