我想了解 Enumerator 类的工作原理。具体来说,我不知道 yielder 对象是如何创建并传递给构造函数采用的代码块的。
这是我的第一次尝试:
class MyEnumerator
def initialize(&block)
@block = block
end
def next()
@block.call self
end
def yield(*args)
args
end
end
num_gen = MyEnumerator.new do |yielder|
(1..10).each { |num| yielder.yield num }
end
5.times { p num_gen.next }
它不起作用,当然是因为我不知道如何推进枚举器。有人可以帮助我了解如何实现它吗?
最佳答案
您应该使用某种延续 的机制。检查:
http://www.ruby-doc.org/docs/ProgrammingRuby/html/ref_c_continuation.html
http://ruby-doc.org/docs/ProgrammingRuby/html/ref_m_kernel.html#Kernel.callcc
此外,用纤程实现枚举器应该是非常简单的(但如果您想理解整个事情,它们可能太“高级”了,那么请尝试继续):
关于ruby - 如何实现基本的 Enumerator 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7756953/