2014-02-05 32 views
0
triangular_numbers = Enumerator.new do |yielder| 
number = 0 
count = 1 
    loop do 
     number += count 
     count += 1 
     yielder.yield number 
    end 
end 
5.times { print triangular_numbers.next, " " } 
puts 

我知道你們都有回答這個問題。triangle_numbers enumerator yielder產量

我想更多地瞭解什麼事情

我說得對不對說yielder是一個參數,它可能是一個哈希或數組和 yielder.yield數基本上是推動任何數字它是在該陣列上。

另外我看到有人用yielder < <號碼,我假設你也可以用 yielder.push(號碼),它會做同樣的事情。

我還想知道爲什麼號碼保留其價值的另一件事。

回答

0

不,它不是一個數據結構。這是一個對象 - Enumerator::Yielder的一個實例,如果你點擊鏈接,你會看到沒有很好的記錄!它用C編寫,唯一的方法是yield和別名<<。你應該把它留給Ruby核心來處理它自己。

它本質上喜歡,其內部使用EnumeratorEnumerable方法來根據需要從一個枚舉取物品。例如,Enumerator#next將從序列中提取下一個項目。 Enumerable中提供的方法更加全面,並且基於Enumerator提供的基本操作。