lazy -> Enumerator::Lazy[permalink][rdoc][edit]- 
自身を lazy な Enumerator に変換したものを返します。
この Enumerator は、以下のメソッドが遅延評価を行う (つまり、配列ではなくEnumeratorを返す) ように再定義されています。
- map/collect
 - flat_map/collect_concat
 - select/find_all
 - reject
 - grep
 - take, take_while
 - drop, drop_while
 - zip (※一貫性のため、ブロックを渡さないケースのみlazy)
 - cycle (※一貫性のため、ブロックを渡さないケースのみlazy)
 
以下はピタゴラス数 (a**2 + b**2 = c**2 を満たす自然数 a, b, c の組) を列挙するプログラムです。
例
def pythagorean_triples (1..Float::INFINITY).lazy.flat_map {|z| (1..z).flat_map {|x| (x..z).select {|y| x**2 + y**2 == z**2 }.map {|y| [x, y, z] } } } end # 最初の10個のピタゴラス数を表示する p pythagorean_triples.take(10).force # takeはlazyなので、forceが必要です p pythagorean_triples.first(10) # firstはeagerです # 100より小さいピタゴラス数を表示する p pythagorean_triples.take_while { |*, z| z < 100 }.force[SEE_ALSO] Enumerator::Lazy