处理 scala ZIO 中的错误



我想使用 catchAll 或 catchSome 处理 ZIO 中的一些异常,如下所示:

object Test extends App {
def run(args: List[String]) =
myApp.fold(_ => 1, _ => 0)
val myApp =
for {
_ <- putStrLn(unsafeRun(toINT("3")).toString)
} yield ()
def toINT(s: String): IO[IOException, Int]= {
IO.succeed(s.toInt).map(v => v).catchAll(er =>IO.fail(er))
}

如果我传递了有效的格式编号,代码成功了,但是如果我传递了无效的格式和想法,则无法处理异常?

s.toInt

IOmonad之外进行评估。发生的情况是,您首先评估s.toInt并尝试将其结果传递给IO.succeed,但是在您将任何内容传递给IO.succeed之前已经抛出了异常。succeed的名称基本上已经表明,无论您传递什么,它都是一个不会失败的普通值。

文档建议使用Task.effectIO.effectZIO.effect来提升可能失败的效果ZIO

这是一个对我有用的程序:

val program =
for {
int <- toINT("3xyz")
_ <- putStrLn(int.toString)
} yield ()
def toINT(s: String): Task[Int] = {
ZIO.fromTry(Try(s.toInt))
}
rt.unsafeRun(program.catchAll(t => putStrLn(t.getMessage)))

相关内容

  • 没有找到相关文章

最新更新