如何遍历 List[IO] 来执行一切并收集所有错误?
How to traverse List[IO] to execute everything and collect all errors?
例如,我有一个 IO 列表,但有一些错误。
def print(x: Int) = {
if(x == 3 || x == 4)
IO.raiseError(new RuntimeException("error " + x))
else
IO(println(x))
}
List.range(1,6).map(print)
如果我使用遍历
List.range(1,6).map(print)
它只打印 1,2,我可以得到一个错误“错误 3”
我想打印所有数字
1
2
5
并获取所有错误的列表
List("error 3", "error 4")
我该怎么做?
解决方法:
List.range(1, 6).traverse(print(_).attempt)
.map(_.collect{case Left(x) => x})
例如,我有一个 IO 列表,但有一些错误。
def print(x: Int) = {
if(x == 3 || x == 4)
IO.raiseError(new RuntimeException("error " + x))
else
IO(println(x))
}
List.range(1,6).map(print)
如果我使用遍历
List.range(1,6).map(print)
它只打印 1,2,我可以得到一个错误“错误 3” 我想打印所有数字
1
2
5
并获取所有错误的列表
List("error 3", "error 4")
我该怎么做?
解决方法:
List.range(1, 6).traverse(print(_).attempt)
.map(_.collect{case Left(x) => x})