Scala Can';我不理解2.0游戏中的迭代器、枚举器、枚举

Scala Can';我不理解2.0游戏中的迭代器、枚举器、枚举,scala,playframework,playframework-2.0,iterate,Scala,Playframework,Playframework 2.0,Iterate,我刚刚开始学习Play 2.0框架。我唯一不能理解的是中描述的迭代器、枚举器和枚举模式。我在函数式语言方面的经验很少 这个模式实现了什么 它如何帮助我编写非阻塞/反应性代码 一些简单的例子会有所帮助。playframework 2.0下载附带了一些示例。其中两个有Iteratee/Comet示例。例如,彗星时钟显示: 然后是这样使用的: Ok.stream(clock &> Comet(callback = "parent.clockChanged")) 将结果以块的形式提供给客

我刚刚开始学习Play 2.0框架。我唯一不能理解的是中描述的迭代器、枚举器和枚举模式。我在函数式语言方面的经验很少

这个模式实现了什么

它如何帮助我编写非阻塞/反应性代码


一些简单的例子会有所帮助。

playframework 2.0下载附带了一些示例。其中两个有Iteratee/Comet示例。例如,彗星时钟显示:

然后是这样使用的:

Ok.stream(clock &> Comet(callback = "parent.clockChanged"))
将结果以块的形式提供给客户端。
Enumerator
对象还具有
fromFile
fromStream
(如
java.io.InputStream
)实用工具枚举器函数

我不确定这是在哪里完成的,但假设这种分块处理不会占用线程。看到一些基准测试是非常有趣的,因为迭代对象的实现肯定会有开销,因为要处理的数据以及计算都被包装在各种对象中

从枚举器馈送的数据将被包装,以便它可以指示有更多数据要处理或数据已到达末尾(EOF)。迭代者的处理结果也会被包装,以便它可以指示是对某些输入计算了结果,还是需要更多的输入来计算结果。我推荐John De Goes,它展示了从折叠到迭代的演变过程。编辑:Brendan McAdams在异步和非阻塞方面有一个很好的Scala Days 2012-在演示的最后(~26分钟),它涉及到迭代对象以及它如何帮助以异步方式处理数据库游标样式的IO

Iteratees
的一个被吹捧的好处是它们可以组合。以下是它们的几种组合方式:

  • 你可以先输入一个枚举数,然后输入另一个
  • 您可以将类型为
    (T)=>U
    的函数映射到
    T
    的枚举数上,以获得
    U
  • 可以交错使用两个枚举数
  • 迭代对象可以留下一些输入供另一个迭代对象使用

那个视频演示似乎是私人的。@Traveler,是的,确实很遗憾,因为它过去是公开的。我不知道这是故意的还是暂时的疏忽。@Traveler,我想他们已经解决了,我只是试过了,视频现在可以播放了。下面是一个关于iteratees的例子。Josh Suereth也有一篇关于他们的博客文章:游戏创作者也有更新的演示。它可能会回答你所有的问题。及
Ok.stream(clock &> Comet(callback = "parent.clockChanged"))