У меня с трудом понимается концепция Iteratee/Enumeratee/Enumerator. Похоже, я понял, как создать пользовательский Iteratee - есть несколько хороших примеров, таких как that.Написание пользовательских Enumeratee с Scala и Play2
Теперь я собираюсь написать свой собственный Enumeratee. Я начинаю копать код для этого, существует не так много комментариев там, но много раз (), fold0(), foldM(), joinI(). Я понял, что Enumeratee действительно что-то сделано из Итерате с соусом, но я все еще не могу поймать концепцию написания своего. Итак, если кто-то поможет мне с этой примерной задачей, он даст правильное направление. Давайте рассмотрим такой пример:
val stringEnumerator = Enumerator("abc", "def,ghi", "jkl,mnopqrstuvwxyz")
val myEnumeratee: Enumeratee[String, Int] = ... // ???
val lengthEnumerator: Enumerator[Int] = stringEnumerator through myEnumeratee // should be equal to Enumerator(6, 6, 14)
myEnumeratee должен ресэмплировать поток путем расщепления заданного потока символов с помощью запятой и возвращающей длины каждого фрагмента («ABC» + «DEF» длина 6, «GHI» + «JKL» длина равна 6 и т. д.). Как это написать?
P.S. Существует Iteratee, который я написал для подсчета длины каждого фрагмента и в конечном итоге возвращает List [Int]. Может быть, это поможет.