2

Play 2.0.4 で Enumerators に頭を悩ませようとしています - ある Enumerator を別の Enumerator とインターリーブしたいのですが、最初の Enumerator の長さだけ (排他的)。そう:

Enumerator("hello", "world") -> "hello" ", " "world"
Enumerator("one", "two", "three") -> "one" ", " "two" ", " "three"

組み込みインターリーブには、1 番目の列挙子の終わりを過ぎて、2 番目の列挙子の終わりまでが含まれます。

val commas : Enumerator[String] = {
  Enumerator(", ", ", ", ", ")
}
val words : Enumerator[String] = {
  Enumerator("hello", "world!")
}
Ok.stream(words interleave commas andThen Enumerator.eof)

「hello, world」ではなく「hello, world, ,」を生成します

大変助かりました!

4

1 に答える 1

0

Enumerators通常、消費されるまで処理されるため、シナリオでは、一方の列挙子が完了すると、残りの残りが処理されるため、結果が期待されます。

必要と思われるのはIteratee、出力を処理し、それに応じてフィルター処理する です。ドキュメントにいくつかの例があります。

別の可能な方法は、Enumeratee(ドキュメントを参照) を使用してインターリーブの出力を変換することです。

于 2012-12-04T15:03:26.873 に答える