new(obj, method = :each, *args) -> Enumerator
[permalink][rdoc]オブジェクト obj について、 each の代わりに method という名前のメソッドを使って繰り返すオブジェクトを生成して返します。 args を指定すると、 method の呼び出し時に渡されます。
例:
str = "xyz" enum = Enumerator.new(str, :each_byte) p enum.map {|b| '%02x' % b } # => ["78", "79", "7a"]
new(size=nil) {|y| ... } -> Enumerator
[permalink][rdoc]Enumerator オブジェクトを生成して返します。与えられたブロックは Enumerator::Yielder オブジェクトを引数として実行されます。
生成された Enumerator オブジェクトに対して each を呼ぶと、この生成時に指定されたブロックを実行し、Yielder オブジェクトに対して << メソッドが呼ばれるたびに、 each に渡されたブロックが繰り返されます。
new に渡されたブロックが終了した時点で each の繰り返しが終わります。このときのブロックの返り値が each の返り値となります。
例:
enum = Enumerator.new{|y| (1..10).each{|i| y << i if i % 5 == 0 } } enum.each{|i| p i } #=> 5 10 fib = Enumerator.new { |y| a = b = 1 loop { y << a a, b = b, a + b } } p fib.take(10) #=> [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]