【发布时间】:2019-07-31 20:40:10
【问题描述】:
在考虑错误并将IO[E, T] 转换为IO[Nothing, T] 之后,我们可以直接将值称为T 类型而不是IO[Nothing, T]。这允许我们返回 T 类型的值,而无需使用 var 和 IO.map。有没有办法做到这一点,如果没有,为什么不呢?
在 ZIO 的当前 README 中没有找到解决方案。
【问题讨论】:
-
至于“为什么不呢?”:这个想法是让函数成为该函数类型签名的“非纯”部分。所以任何与
IO交互的东西都必须是IO本身。如果你在普通的 Scala 中使用了Future,那是一种相同的情况:如果函数所做的任何事情都涉及 Futures,它本身必须返回一个 Future。您可以通过在内部调用Await.result来“隐藏”它,但非常不鼓励这样做。如有必要,只有最终调用者应该这样做。与IO相同。您可以调用unsafeRun来“提取”该值,但您确实不应该这样做。