枚举器与迭代器包的比较

20

目前,有两种流行的选择实现迭代器模式

它们各自有什么优势?一个比另一个更好,还是取决于使用情况(如果是这样,那么决定使用哪个的标准是什么)?

1个回答

21

目前至少有三个iteratee库:

  • enumerator
  • iteratee
  • iterIO

我认为enumerator库是当前首选的库,因为它更简单。如果您在意,这也是我用于自己项目的库。另外两个库更灵活,在某些情况下可能更快,但它们也更加复杂。如果您想学习iteratees,建议从enumerator开始。它是Oleg原始想法最直接的实现。

如果您有特定的用例并需要使用标准iteratee方法的许多功能,则可能需要考虑使用iteratee包。在更复杂的方案中,您可能还需要尝试iterIO包,它具有略微不同且更灵活的概念。特别是iteratees可以与enumerator通信,而这在其他两个包中是不可能的。

如果所有三个库都不够灵活,则可能需要使用monad-coroutine包自己编写coroutines。Iteratees和enumerators是一种特殊类型的协程,可以以特定的方式组合。 monad-coroutine包提供了一般类型,并允许您使用自己的交互概念。


3
一个小的问题:iteratee 迭代器也可以与枚举器通信。例如,这就是 seek 实现的方式。尽管不如 iterIO 机制那样复杂。 - John L
@ertes,其他属性如效率/性能呢?不使用相同iteratee库的库可以合并吗? - hvr
一般而言,这些库彼此之间不兼容。 - ertes
2
iterIO 真的“更复杂”吗?我认为它的整个目标是通过统一迭代器和枚举器的概念来变得更简单。 - Greg Weber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接