如何累积scala.util.Try次失败?

How to accumulate scala.util.Try failures?

假设我需要累积函数故障。我可以用 scalaz:

轻松做到
val foo: String => Throwable\/Int = {s => \/.fromTryCatchNonFatal(s.toInt)}
val v1 = foo("abc").validation.toValidationNel
val v2 = foo("xyz").validation.toValidationNel
val v = (v1 |@| v2) {_ + _}
val e = v.toDisjunciton

现在我有一个函数,returns scala.util.Try 而不是 scalaz.\/

val f: String => Try[Int] = {s => Try(s.toInt)}

累积 scala.util.Try 失败的最佳方法是什么?我是否需要手动将 scala.util.Try 转换为 scalaz.Validation,反之亦然?

也许这对你有帮助:

def accumulate[T](tries:Try[T]*) = tries.collect {case Failure(t) => t}    

scalaz 7.2.x 包含 https://github.com/scalaz/scalaz/blob/122e5f9dfc3fbe9189d1f817e703c78047fbb3ef/core/src/main/scala/scalaz/std/Try.scala#L14-L15,您可以将其用作创建隐式 class 的想法,它会为您转换为 Validation 和 ValidationNel。