根據Ruby的文檔,如果沒有爲to_enum
或enum_for
方法提供目標方法,則枚舉器對象使用each
方法(枚舉)。現在,讓我們採取以下猴補丁和枚舉,作爲一個例子Ruby的Enumerator對象如何通過內部迭代器在外部迭代?
o = Object.new
def o.each
yield 1
yield 2
yield 3
end
e = o.to_enum
loop do
puts e.next
end
鑑於枚舉對象使用each
方法回答時next
叫,怎麼辦的each
方法看來電一樣,每次next
被稱爲? Enumeartor類是否預加載o.each
的所有內容並創建枚舉的本地副本?或者是否有某種Ruby魔法會在每個yield語句中掛起操作,直到在enumeartor上調用next
?
如果創建了內部副本,是否是深層副本?那麼可以用於外部枚舉的I/O對象呢?
我正在使用Ruby 1.9.2。
只要你知道,你用文本週圍反引號(\')做行內代碼格式化':)' –
是歡迎您!下次要記住這一點。 –