この質問は、Ruby 1.9.1で列挙子を使用する方法ではなく、どのように動作するのか不思議です。ここではいくつかのコードは次のとおりです。Ruby 1.9.1で列挙子はどのように機能しますか?
上記のコードでclass Bunk
def initialize
@h = [*1..100]
end
def each
if !block_given?
enum_for(:each)
else
0.upto(@h.length) { |i|
yield @h[i]
}
end
end
end
私は、連続する各要素を取得しe = Bunk.new.each
、その後、e.next
、e.next
を使用することができますが、正確にどのようにそれが実行を停止し、その後、適切な場所で再開されますか?
私は、0.upto
の収率がFiber.yield
に置き換えられた場合、理解しやすいことを認識していますが、ここには該当しません。それは普通の古いyield
なので、どうやって動くのですか?
私はenumerator.cを見ましたが、私にとっては理解できない部分です。多分、誰かが、1.8.6スタイルの継続ベースの列挙子ではなく、ファイバーを使ってRubyで実装することができます。
あなたの答えはありがたいです。はい、これについてかなり多くの詳細を求めています。具体的には、Rubyですべてを実装することが可能かどうか、またはRubyでは不可能なCで何か不機嫌なことが起こっているかどうかを知りたいと思います。純粋にRubyで実装できるのであれば、コードを見たいと思っています! :) – horseyguy