Перечислители чередования играют 2.0

Попытка сосредоточиться на Enumerators в игре 2.0.4 - я хотел бы чередовать один Enumerator с другим, но только до тех пор, пока длина первого перечислителя (исключительная). Так:

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

Встроенное перемежение включает в себя конец первого перечислителя до конца второго перечислителя.

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

производит "привет, мир", а не "привет, мир"

Помощь очень ценится!

1 ответ

Enumerators обычно обрабатываются до тех пор, пока не будут использованы, поэтому в вашем сценарии результат ожидается, как только один перечислитель будет обработан, а остальная часть другого обработана.

То, что вам нужно, это Iterateeкоторый обрабатывает вывод и фильтрует соответственно. Вы можете найти некоторые примеры в документации.

Другим возможным способом является использование Enumeratee (см. документацию) для преобразования выходных данных чередования.

Другие вопросы по тегам