Enumerator
のインスタンスは、内部状態をどのように追跡しますか?例えば、次のコードを取る:Enumeratorオブジェクトはどのように状態を把握していますか?
each
としてイテレータメソッドが
enum
に呼び出され
enum = Enumerator.new do |yielder|
yielder << 1
yielder << 2
yielder << 3
end
puts enum.next # => 1
puts enum.next # => 2
enum.rewind # start again
puts enum.next # => 1
は、一度yielder#<<
(又はyielder#yield
)へのすべての呼に対してeach
に与えられたブロックを実行します。
私が理解しようとしているのは、Rubyがnext
をどのように動作させるかです。 next
の値はどのように覚えていますか?どうすれば最初のものに戻るrewind
? next
がRubyでどのように動作するかの基本的な実装をコード化する場合、どうすればよいでしょうか?
次のようになります。https://github.com/rubinius/rubinius/blob/master/core/enumerator.rb –
繊維/コルーチン。 –