scala - 处理 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
IO
在单子之外进行评估。发生的情况是您s.toInt
首先评估并尝试将结果传递给IO.succeed
,但是在您可以将任何内容传递给之前已经引发了异常IO.succeed
。名字succeed
已经基本表明你确定你传递的任何东西都是一个不会失败的普通值。
文档建议使用Task.effect
,IO.effect
或ZIO.effect
来提升可能失败的效果ZIO
。
推荐阅读
- c++ - 返回 unique_ptr
在声明为返回 unique_ptr 的函数中 - javascript - 如何将输入拆分为多个字段
- python - Python 中的网页抓取 - Understat.com
- java - 如何在firebase数据库中删除用户中的一个条目?
- android - Android Espresso:为什么我的测试没有通过多模块项目?
- elixir - Phoenix 上有没有像 RoR 这样的 select_tag
- mysql - 如何使用codeigniter在数据库表的映射列中插入逗号分隔的字符串
- javascript - JavaScript嵌套的内部for循环不起作用
- azure - 用于计算密集型工作的 Azure FunctionApps 与 Azure App Services
- delphi - Delphi - 如何处理多种除外类型