我一直在研究Ruby和Python生成器(在Ruby中称为
然而,我注意到一个区别是Python生成器支持
引发GeneratorExit异常以终止生成器函数所在的位置。如果生成器函数随后引发StopIteration异常(通过正常退出或由于已经关闭)或者GeneratorExit异常(未捕获异常),则
Ruby
此外,我还发现Ruby
谢谢。
Enumerators
)之间的相似性/差异,目前看来它们几乎是等效的。然而,我注意到一个区别是Python生成器支持
close()
方法,而Ruby生成器则不支持。从Python文档中可以看到close()
方法做如下操作:引发GeneratorExit异常以终止生成器函数所在的位置。如果生成器函数随后引发StopIteration异常(通过正常退出或由于已经关闭)或者GeneratorExit异常(未捕获异常),则
close()
返回其调用者。Ruby
Enumerators
没有支持close()
方法,这是有充分理由还是意外遗漏呢?此外,我还发现Ruby
Enumerators
支持rewind()
方法,而Python生成器不支持......这也有原因吗?谢谢。
next
或send
方法的进一步调用。例如,您可以调用close
来表示从多个消费者中的一个指示已找到期望的值。 - intuitedclose()
实际上常用吗?我记得在某个地方读到过,它被Python社区认为是“神秘的”,并没有真正被使用。 - horseyguyclose()
是用于与生成器进行双向通信并将其转换为“协程”的 API 的一部分。你可以在 http://www.python.org/dev/peps/pep-0342/ 上了解更多信息。Ruby 是否具有这个概念? - alexis