Перечислители чередования играют 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
(см. документацию) для преобразования выходных данных чередования.