为什么我们需要迭代对象上的scalaz.stream?

为什么我们需要迭代对象上的scalaz.stream?,scala,scalaz,iterate,scalaz-stream,Scala,Scalaz,Iterate,Scalaz Stream,最近,我一直在玩和玩的。我认为iteratee提供模块化而不是旧的命令while循环是一个好主意——其目的是使用函数作为每一行的处理程序,而不是从文件中获取字符串[] 然而,当我查看scalaz.stream的特性概述时,它提到了它的设计将取代旧的iteratee实现,但没有提到他们为什么要替换它 有人能向我解释一下,如果我们可以流式处理,我们可以获得哪些功能和好处,以及使用iteratee的缺点是什么吗?与scalaz流相比,iteratee更难使用。Scalaz流在代码重用和组合方面也优于迭

最近,我一直在玩和玩的。我认为iteratee提供模块化而不是旧的命令while循环是一个好主意——其目的是使用函数作为每一行的处理程序,而不是从文件中获取字符串[]

然而,当我查看scalaz.stream的特性概述时,它提到了它的设计将取代旧的iteratee实现,但没有提到他们为什么要替换它


有人能向我解释一下,如果我们可以流式处理,我们可以获得哪些功能和好处,以及使用iteratee的缺点是什么吗?

与scalaz流相比,iteratee更难使用。Scalaz流在代码重用和组合方面也优于迭代对象

事实上,整个“服务器”现在可以在scalaz流中实现,而不是像Iteratee模式那样的小程序或代码片段

Scalaz stream为您提供了卓越的资源安全性、终止原因传播、微调的并发控制、大量的组合器,并且易于扩展

我们现在的项目是200K+scalaz流代码,是复杂的多用户多宿主集群服务器,所有这些都在scalaz流中实现


如果您愿意分享您真正想要实现的目标,我可以更“准确”地介绍这些好处,并提供一些快速的代码示例,这有望证明上述主张:-)

谢谢您的回答,但我想我需要更多的细节或代码示例来演示迭代流。例如,就我现在所关心的而言,“易于扩展”对于iteratee模式来说是很好的。如果我想定义head、drop甚至map,我可以定义一个返回iteratee的方法。另外,如果我想包含文件的记录行号,我可以将元素case类更改为Element(x:E,lineNumebr:Int)。对于诸如“终止原因传播、微调并发”之类的事情,我不确定。