搞不明白Iteratee,枚举,Enumeratee在播放2.0 [关闭](Can't un

2019-07-29 00:09发布

我刚开始学玩2.0框架。 有一件事我只是不明白是在描述的Iteratee,枚举和Enumeratee模式播放教程 。 我在函数式语言的经验非常少。

这是什么模式完成?

它是如何帮我写非阻塞/无码?

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

Answer 1:

该playframework 2.0下载附带了一些样品。 其中两种已Iteratee /彗星的例子。 例如,彗星时钟示例应用程序显示:

lazy val clock = Enumerator.fromCallback { () =>
  Promise.timeout(Some(dateFormat.format(new Date)), 100 milliseconds)
}

然后这样使用:

Ok.stream(clock &> Comet(callback = "parent.clockChanged"))

这将结果输送给客户端的块。 该Enumerator对象还具有fromFilefromStream (如在java.io.InputStream )实用程序枚举函数。

我不知道在这样做,但前提是,这个分块处理不会占用线程。 看到一些基准,因为肯定是有开销iteratees的执行情况,作为计算被包裹在各种物体被处理,以及数据这将是非常有趣的。

是从枚举馈送数据被包裹,使得它可以指示有更多的数据处理或数据已到达结尾(EOF)。 iteratees的处理结果也被缠绕以便它可以指示一个结果是否已经计算上一些输入或需要更多的输入,来计算结果。 我建议约翰·变为nescala演示 ,显示从折到Iteratees演变。 编辑:布伦丹·麦克亚当斯有一个很好的Scala日2012 呈现在异步和非阻塞-对演示文稿(〜26分钟)倒是iteratees并在异步风格它处理数据库光标样式IO如何帮助结束。

的一个好处吹捧Iteratees是它们组成。 这里有他们组成的几种方法:

  • 你可以养活一个enumator andThen另一
  • 可以映射类型的函数(T) => U超过枚举T得到的枚举U
  • 你可以交错 2个枚举
  • 一个iteratee可以留下一些输入到另一个iteratee消耗


文章来源: Can't understand Iteratee, Enumerator, Enumeratee in Play 2.0 [closed]