我有一個有狀態的算法,它逐步獲取輸入並逐漸產生輸出。投入和產出在數量上無關;即一個輸入可能產生零個或多個輸出。從有狀態算法創建一個枚舉器
我試圖在Play框架中將它變成Enumeratee
,但我很難入門。
我的算法具有本地可變狀態和同步操作,看起來像這樣
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
?
嗯......我差點把它......'Iteratee#feed'和'Iteratee.flatten'都丟失了。謝謝。我也懷疑是否有一些Play圖書館功能的「更好」形式,但這當然很容易遵循,並幫助我理解發生了什麼。 –