Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > generatorライブラリ > Generatorクラス
クラスの継承リスト: Generator < Enumerable < Object < Kernel
内部イテレータを外部イテレータに変えるためのクラスです。 実装に callcc を使っているので遅いです。
例:
require 'generator' # Generator from an Enumerable object g = Generator.new(['A', 'B', 'C', 'Z']) while g.next? puts g.next end # Generator from a block g = Generator.new { |g| for i in 'A'..'C' g.yield i end g.yield 'Z' } # The same result as above while g.next? puts g.next end
new(enum = nil) -> Generator
[permalink][rdoc]new(enum = nil) {|g| ... } -> Generator
Enumerable オブジェクトかブロックから Generator オブジェクトを生成します。
ブロックは生成した Generator オブジェクトをブロック引数として呼ばれます。
current -> object
[permalink][rdoc]現在の位置にある要素を返します。next と違い位置は移動しません。
例:
g = Generator.new(['A', 'B', 'C', 'Z']) p g.current # => 'A' p g.current # => 'A'
each {|e| ... } -> self
[permalink][rdoc]ジェネレータの要素を引数としてブロックを評価します。self を返します。
end? -> bool
[permalink][rdoc]次の要素がなく、ジェネレータが終わりに達しているなら真を返します。
index -> Integer
[permalink][rdoc]pos -> Integer
現在の位置を返します。
例:
g = Generator.new(['A', 'B', 'C', 'Z']) p g.pos # => 0 p g.next # => 'A' p g.pos # => 1
next -> object
[permalink][rdoc]現在の位置にある要素を返し、位置を1つ進めます。
例:
g = Generator.new() do |g| ['A', 'B', 'C', 'Z'].each{|s| g.yield s } end p g.next # => 'A' p g.next # => 'B'
next? -> bool
[permalink][rdoc]次の要素が存在するなら真を返します。
rewind -> self
[permalink][rdoc]ジェネレータを最初に巻き戻します。self を返します。
例:
g = Generator.new() do |g| ['A', 'B', 'C', 'Z'].each{|s| g.yield s } end p g.next # => 'A' p g.next # => 'B' g.rewind p g.next # => 'A'
yield(val) -> self
[permalink][rdoc]val をジェネレータに渡します。 Generator.new() {|g| ... } のブロックの中でしか呼ぶことができません。 ジェネレータに渡された val は next などで取り出すことができます。
例:
g = Generator.new() do |g| n = 0 loop do g.yield n n += 1 end end p g.next # => 0 p g.next # => 1 p g.next # => 2 g.rewind p g.next # => 0