让我们从一些 scalaz-stream 文档中举一个例子,但有一个理论上的扭曲。
import scalaz.stream._
import scalaz.concurrent.Task
val converter: Task[Unit] =
io.linesR("testdata/fahrenheit.txt")
.filter(s => !s.trim.isEmpty && !s.startsWith("//"))
.map(line => fahrenheitToCelsius(line.toDouble).toString)
.intersperse("\n")
.pipe(text.utf8Encode)
.to(io.fileChunkW("testdata/celsius.txt"))
.run
// at the end of the universe...
val u: Unit = converter.run
在这种情况下,文件很可能包含一些非双精度字符串,并且fahrenheitToCelsius
会抛出一些NumberFormatException
. 假设在这种情况下,我们可能希望记录此错误并忽略它以进行进一步的流处理。惯用的做法是什么?我见过一些例子,但它们通常collectFrom
是流。