new(obj, size=nil) {|yielder, *values| ... } -> Enumerator::Lazy
[permalink][rdoc]Lazy Enumerator を作成します。Enumerator::Lazy#force メソッドなどによって列挙が実行されたとき、objのeachメソッドが実行され、値が一つずつブロックに渡されます。ブロックは、yielder を使って最終的に yield される値を指定できます。
Enumerable#filter_map と、その遅延評価版を定義する例:
module Enumerable def filter_map(&block) map(&block).compact end end class Enumerator::Lazy def filter_map Lazy.new(self) do |yielder, *values| result = yield *values yielder << result if result end end end 1.step.lazy.filter_map{|i| i*i if i.even?}.first(5) # => [4, 16, 36, 64, 100]
[SEE_ALSO] Enumerator.new