我一直在研究Ruby和Python生成器(在Ruby中称为Enumerators
)之间的相似之处/差异,并且据我所知,它们几乎相当。Ruby生成器与Python生成器
但是我注意到的一个区别是Python生成器支持close()
方法,而Ruby生成器不支持。从Python文档中,close()
方法据说执行以下操作:
在生成器函数暂停的位置引发一个GeneratorExit。如果发电机的功能,然后引发StopIteration异常(由正常退出,或因已被关闭)或GeneratorExit(由未捕获异常),接近返回到它的调用者。”
有一个很好的理由红宝石Enumerators
不支持close()
方法呢?还是一个偶然 遗漏?
我还发现,红宝石Enumerators
支持rewind()
方法尚未Python生成不...是有这个吗?
理由谢谢
好奇,但我不明白你会怎么用这个:你能举个例子吗? – 2010-09-25 20:31:54
@Andrew Vit:这可以用来使发生器保存的资源 - 数据库连接,文件等被清理。它还会阻止从代码的其他部分进一步调用其“下一个”或“发送”方法。例如,您可以调用'close'来指示其中一个消费者向其他人表明已找到期望的值。 – intuited 2010-09-25 20:38:22
@intuited,是Python的'close()'实际上常用吗?我想我在某个地方看到它被python社区认为是“奥术”,并没有真正被利用。 – horseyguy 2010-09-26 12:39:53