【发布时间】:2020-07-17 15:07:12
【问题描述】:
我刚刚开始评估 ZIO,以改进我的异步 Scala 代码的编程模型和性能。在我的代码库中,我经常处理Future[Option[T]],到目前为止,我已经使用Scalaz 的OptionT monad 转换器处理了这个问题。现在我想用 ZIO 试试这个。
考虑两个函数:
def foo: String => Future[Option[T]]
和
def bar: T => Future[U]
我尝试过这样的事情:
val t = for {
o: Option[Int] <- ZIO.fromFuture { implicit ec =>
foo("test")
}
i: Int <- ZIO.fromOption(o)
s: String <- ZIO.fromFuture { implicit ec =>
bar(i)
}
} yield s
根据我的 IDE,t 在这种情况下属于 ZIO[Any, Any, String] 类型。我不知道该怎么办。
我想考虑三种可能性:
- “成功”案例,
foo生成Some,可以与值上的其他函数组合 -
foo产生None的情况 - 任一函数产生错误的情况
我不确定如何使用 ZIO 解析这种情况下的这些可能性。任何帮助表示赞赏。
【问题讨论】:
标签: scala functional-programming scalaz zio