如何使用Try and Try [Option [T]]进行理解?

时间:2017-06-22 13:55:16

标签: scala

我有一个函数返回Try [Option [T]]和另一个接受T作为输入参数的函数并返回Try [Boolean]。 这有可能将它们结合起来以便理解吗? 可能与猫的OptionT? 我试着这样做,没有运气:

    val result =
      for{
      u <- OptionT(function1)
      res <- function2(u)
    } yield res

3 个答案:

答案 0 :(得分:3)

您也可以使用cats库中的OptionT monad变换器执行此操作。您可以使用OptionT.liftF方法将Try[T]转换为OptionT[Try, T]

def solution[T](
  function1: => Try[Option[T]], 
  function2: T => Try[Boolean]
): Try[Option[Boolean]] = (
  for {
    r1 <- OptionT(function1)
    r2 <- OptionT.liftF(function2(r1))
  } yield r2
).value

答案 1 :(得分:2)

看起来猫'sequence可以在这里提供帮助 - 它允许“交换”TryOption(这基本上就是你需要做的事情,以便{{1} } Try[Boolean]的结果可以包围function2而不是相反的方式):

Option

答案 2 :(得分:0)

for {
    optionT <- tryOptionT()
    t <- optionT
    result <- tryBoolean(t)
} yield result