2

我目前有以下代码:

val writer: PrintWriter = ???
val linesObservable: Observable[String] = ???

val future: CancelableFuture[Unit] = linesObservable.foreach(writer.write)

writer.close()

我的目标是消除上述代码段中的所有副作用。

从功能的角度来看,writer应该充当future.

因为我使用的是 Monix 版本3.0.0-RC2,所以有新的bracket方法可用于Observableand Task(可能甚至更多的类),这可能是我正在寻找的 - 但我不太明白如何。

4

1 回答 1

3

是的,你是对的。最好PrintWriter作为资源获取,以便在完成写入时可以干净地关闭它。

val writer: Resource[Task, PrintWriter] = 
  Resource.make[Task, PrintWriter](???)(pw => Task.delay(pw.close()))

val linesObservable: Observable[String] = ???

writer.use { pw =>
  linesObservable.foreachL(pw.write)
}
于 2019-11-16T07:03:55.480 回答