我試圖寫入以下功能停止在用戶輸入
def haltOnUserInput[O](process: Process[Task, O]): Process[Task, O]
在用戶發送上stdin
一行其停止process
一個Process [任務,O]。在這種情況下,可以在結束進程本身之前等待進程中的當前計算結束。
我曾嘗試以下:
scala> :paste
// Entering paste mode (ctrl-D to finish)
import scalaz.{ -\/, \/-, \/ }
import scalaz.stream._
import scalaz.concurrent.Task
def haltOnUserInput[O](process: Process[Task, O]): Process[Task, O] = {
process.either(io.stdInLines).flatMap {
case -\/(o) => Process.emit(o)
case \/-(_) => println("here"); Process.halt
}
}
而且我測試這樣的:
scala> val oneSec = scala.concurrent.duration.Duration("1s")
oneSec: scala.concurrent.duration.Duration = 1 second
scala> val test = haltOnUserInput(Process.awakeEvery(oneSec)).take(10).map(_.toString).to(io.stdOutLines).run
test: scalaz.concurrent.Task[Unit] = [email protected]
scala> test.run
1000144294 nanoseconds
2000148316 nanoseconds
here
3000130736 nanoseconds
here
4000124898 nanoseconds
5000189134 nanoseconds
6000201269 nanoseconds
here
7000127797 nanoseconds
8000132194 nanoseconds
9000191001 nanoseconds
10000126974 nanoseconds
正如你所看到的,用戶的輸入被確認(「這裏」被打印出來,好幾次)但過程不會中斷。我不確定flatMap
的行爲如預期那樣Process.halt
。
任何關於如何正確書寫haltOnUserInput
?
什麼 – Daenyth
@Daenyth我已經作出了明確的問題,這裏實際的問題:如何正確寫入'haltOnUserInput'? – betehess