我有一个有状态的算法,它逐渐接受输入并逐渐产生输出。输入和输出在数量上不相关;即一个输入可能产生零个或多个输出。
我正试图将它变成Enumeratee
Play Framework 中的一个,但我很难开始。
我的算法具有本地可变状态和同步操作,看起来像这样
var state = 'foo
var i = input()
while (i != null) {
if (state == 'foo && i >= 0) {
// 2 outputs, and change state
output(i - 2)
output(i * 3)
state = 'bar
} else if (state == 'foo) {
// error
error("expected >= 0")
} else if (state == 'bar) {
// 0 outputs, and change state
state = 'foo
}
... // etc
i = input()
}
if (state != 'bar) {
error("unexpected end")
}
我研究了map
,filter
等的实现Enumeratee.scala
,我有点理解它们。但是我很难看到如何编写我自己的更复杂的实现。
您能否描述/演示我如何将此算法转换为Enumeratee
?