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

时间:2015-11-18 07:46:24

标签: scala validation scalaz

假设我需要累积功能失败。我可以使用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

现在我有了一个函数,它返回scala.util.Try而不是scalaz.\/

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

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

2 个答案:

答案 0 :(得分:2)

也许这可以帮到你:

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

答案 1 :(得分:1)

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