首页 > 解决方案 > 使用 OptionT 将 Future[Option[_]] 与普通 Future[_] 组合时语法更好

问题描述

假设我有f(a: Int): Future[Option[T]]and g(b: Int): Future[K],我可以像下面这样将它们与 cat's 结合起来OptionT

for {
  f <- OptionT(f(a))
  g <- OptionT(g(b).map(Option.apply)
} yield (f, g)

有没有更好的方法来做到这一点而无需映射每个Future[_]

标签: scala

解决方案


一个小的改进是做类似的事情:

for {
  f <- OptionT(f(a))
  g <- OptionT.liftF(g(b))
} yield (f, g)

推荐阅读