Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Enumerable::Enumeratorクラス
クラスの継承リスト: Enumerable::Enumerator < Enumerable < Object < Kernel
このクラスは Enumerator に置き換えられました。 Enumerable::Enumerator は互換性のために残されています。
each 以外のメソッドにも Enumerable の機能を提供するためのラッパークラスです。 また、外部イテレータとしても使えます。 Ruby 1.9 以降では Enumerable::Enumerator は Enumerator になっています。
Enumerable モジュールは、 Module#include 先のクラスが持つ each メソッドを元に様々なメソッドを提供します。 例えば Array#map は Array#each の繰り返しを元にして定義されます。 Enumerator を介することにより String#each_byte のような 異なる名前のイテレータについても each と同様に Enumerable の機能を利用できます。
Enumerator を生成するには Enumerable::Enumerator.new あるいは Object#to_enum, Object#enum_for を利用します。
new(obj, method = :each, *args) -> Enumerable::Enumerator
[permalink][rdoc]オブジェクト obj について、 each の代わりに method という 名前のメソッドを使って繰り返すオブジェクトを生成して返します。 args を指定すると、 method の呼び出し時に渡されます。
例:
str = "xyz" enum = Enumerable::Enumerator.new(str, :each_byte) p enum.map {|b| '%02x' % b } # => ["78", "79", "7a"]
each {...} -> object
[permalink][rdoc]生成時のパラメータに従ってブロックを繰り返します。 生成時に指定したイテレータの戻り値をそのまま返します。
例:
str = "Yet Another Ruby Hacker" enum = Enumerable::Enumerator.new(str, :scan, /\w+/) enum.each {|word| p word } # => "Yet" # "Another" # "Ruby" # "Hacker" str.scan(/\w+/) {|word| p word } # => "Yet" # "Another" # "Ruby" # "Hacker"
next -> object
[permalink][rdoc]「次」のオブジェクトを返します。
現在までの列挙状態に応じて「次」のオブジェクトを返し、列挙状態を1つ分進めます。 列挙が既に最後へ到達している場合は、 列挙状態を最初まで巻き戻すとともに StopIteration 例外を発生します。
next メソッドによる外部列挙の状態は他のイテレータメソッドによる 内部列挙には影響を与えません。 ただし、 IO#each_line のようにおおもとの列挙メカニズムが副作用を 伴っている場合には影響があり得ます。
[SEE_ALSO] Enumerable::Enumerator#rewind
例1:
str = "xyz" enum = str.each_byte str.bytesize.times do puts enum.next end # => 120 # 121 # 122
例2:
str = "xyz" enum = str.each_byte begin puts enum.next while true rescue StopIteration puts "iteration reached at end" end # => 120 # 121 # 122 # iteration reached at end puts enum.next #=> 120
例3: Kernel.#loop は StopIteration を捕捉します。
str = "xyz" enum = str.each_byte loop do puts enum.next end # => 120 # 121 # 122
rewind -> self
[permalink][rdoc]列挙状態を巻き戻します。
next メソッドによる外部列挙の状態を最初まで巻き戻します。 self を返します。
[SEE_ALSO] Enumerable::Enumerator#next
例:
str = "xyz" enum = str.each_byte p enum.next # => 120 p enum.next # => 121 enum.rewind p enum.next # => 120
with_index {|(*args), idx| ... } -> object
[permalink][rdoc]with_index -> Enumerator
生成時のパラメータに従って、要素にインデックスを添えて繰り返します。 インデックスは 0 から始まります。
ブロックを指定した場合の戻り値は生成時に指定したレシーバ自身です。
例:
str = "xyz" enum = Enumerable::Enumerator.new(str, :each_byte) enum.with_index {|byte, idx| p [byte, idx] } # => [120, 0] # [121, 1] # [122, 2]
生成時のパラメータに従って、要素にインデックスを添えてブロックを繰り返します。 インデックスは 0 から始まります。