我有一个函数返回Try [Option [T]]和另一个接受T作为输入参数的函数并返回Try [Boolean]。 这有可能将它们结合起来以便理解吗? 可能与猫的OptionT? 我试着这样做,没有运气:
val result =
for{
u <- OptionT(function1)
res <- function2(u)
} yield res
答案 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
可以在这里提供帮助 - 它允许“交换”Try
和Option
(这基本上就是你需要做的事情,以便{{1} } Try[Boolean]
的结果可以包围function2
而不是相反的方式):
Option
答案 2 :(得分:0)
for {
optionT <- tryOptionT()
t <- optionT
result <- tryBoolean(t)
} yield result