Rubyのドキュメントによると、またはメソッドeach
にターゲットメソッドが提供されていない場合、Enumeratorオブジェクトはメソッドを(列挙するために)使用します。それでは、例として、次のモンキーパッチとその列挙子を取り上げましょう。to_enum
enum_for
o = Object.new
def o.each
yield 1
yield 2
yield 3
end
e = o.to_enum
loop do
puts e.next
end
Enumeratorオブジェクトがeach
メソッドを使用してが呼び出されたときに応答するnext
とすると、メソッドの呼び出しは、呼び出されるeach
たびにどのようになりnext
ますか?Enumeartorクラスは、のすべてのコンテンツをプリロードし、o.each
列挙用のローカルコピーを作成しますか?next
または、enumeartorで呼び出されるまで、各yieldステートメントで操作をハングさせるある種のRubyマジックはありますか?
内部コピーが作成された場合、それはディープコピーですか?外部列挙に使用できるI/Oオブジェクトはどうですか?
Ruby1.9.2を使用しています。