設計上不可能なことをやっているような気がしますが、Play Iteratees がどのように機能するかを完全に理解したいと思っています...
Enumerator
現在、を介してに何らかの変換を適用する関数を作成していますEnumeratee
。今のところ、この特定の変換を行うのに問題はありません。しかし、私はいくつかの要素をEnumerator
. その時点でどちらが処理されているかがわかるので、mapInput
またはを使用することを考えました。この問題に対する私の現在の解決策は次のようになります。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
ます。これは、play-iteratees 2.1.5 を使用した Scala 2.10.2 にあります。