如何累积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。
假设我需要累积函数故障。我可以用 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。