我真的觉得我在做一些设计上不可能的事情,但我真的很想完全了解 Play Iteratees 是如何工作的......
我目前正在编写一个函数,该函数Enumerator
通过Enumeratee
. 到目前为止,我进行这种特定的转换没有问题。但我想在Enumerator
. 我想到了使用mapInput
or mapInputFlatten
,因为我可以看到当时Input
正在处理哪个。我目前对这个问题的解决方案如下:
import play.api.libs.iteratee.{Enumerator, Enumeratee, Input, Iteratee}
import scala.concurrent.Await
import scala.concurrent.duration.DurationInt
def appendingEnumeratee: Enumeratee[Int, Int] = Enumeratee.mapInputFlatten {
case Input.El(i) => Enumerator(i)
case Input.Empty => Enumerator.enumInput(Input.Empty)
case Input.EOF => Enumerator(42)
}
Await.result(Enumerator(1 to 41: _*).through(appendingEnumeratee).apply(Iteratee.getChunks), 5.seconds)
但是,我最终得到java.lang.RuntimeException: diverging iteratee after Input.EOF
. 这是 Scala 2.10.2 和 play-iteratees 2.1.5