我想使用下面的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.toIntIO monad之外进行评估。发生的情况是,您首先评估s.toInt并尝试将其结果传递给IO.succeed,但是在将任何内容传递给IO.succeed之前已经抛出了异常。 succeed的名称已经基本表明您可以确保无论传递什么,它都是一个不会失败的简单值。

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

关于scala - 处理Scala ZIO中的错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56885869/

10-09 17:14