2011-12-27 7 views
5

は、このような単純な列挙子考えてみましょう:Enumerator.newに「yielder」オブジェクトが必要なのはなぜですか?

natural_numbers = Enumerator.new do |yielder| 
    number = 1 
    loop do 
    yielder.yield number 
    number += 1 
    end 
end 

を私の質問は:なぜルビーは、私たちがyielderオブジェクトの利回りを呼び出すことを必要としていますか?言い換えれば、yielder.yield numberyield numberに置き換えられないのはなぜですか?この例では、許可されていれば同じものであるように見えます。 yielderが重要な意味で使われている例はありますか?もしそうなら、あなたはそれを与えることができますか?そうでない場合は、ヤイヤーの目的は何ですか?

ありがとうございました。

答えて

3

それが理由であるかどうかは確かではありませんが、yieldを呼び出すメソッドにサブミットされたブロックには、yieldだけが適用されます(natural_numbersを含むメソッド)。 Enumeratorのために、すなわち、Enumerator要素を放出することを望むものを実行することは不可能である。同じ名前を持っていますが、Yielder#yieldがメソッドであり、Rubyのyieldがステートメントです。

つまり、yieldステートメントで動作するコンストラクタEnumeratorを実装することはできません。

関連する問題