1
我正在瀏覽Enumerator
類的文檔,發現一個讓我困惑的斐波那契實現。這裏的代碼:將「yielder」對象傳遞給Ruby的枚舉器
fib = Enumerator.new do |y|
a = b = 1
loop do
y << a
a, b = b, a + b
end
end
p fib.take(10) #=> [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
這是怎麼回事?循環塊中的兩條線特別讓我困惑。
鏈接:http://ruby-doc.org/core-2.1.5/Enumerator.html#method-c-new
我不認爲「yielder」對象可以解釋?爲什麼有這個對象?爲什麼不只是「屈服」? –
@DanielStevens「yield」關鍵詞例如在方法體內使用'yield a'來調用(yield control)作爲方法調用的一部分提供的代碼塊,將任何參數作爲參數傳遞給塊。但這不是我們在這裏需要的。如果我們有一個'Enumerator'並且想要使用'Enumerable'中的一個方法,讓我們說'find',那麼我們需要一種方法來傳遞一個塊的值(Enumerator.new產生的值)的塊)到另一個塊(傳遞給'find'的塊) - 這是yielder對象的用途。 – mikej