是否可以使用 Scalaz'traverse
and traverseU
with Either
代替Option
?
对于以下代码:
val list = List(1, 2, 3)
def f(i: Int): Either[Int, String] =
if (i > 2) Left(i)
else Right("must be lower than 3")
我想穿越list
with f
并返回第一个Right(msg)
如果出现一个或多个失败,或者Left(list)
如果一切顺利的话。
您有什么理由不使用Validation
and NonEmptyList
通过斯卡拉兹?
你可以轻松地做类似的事情
def f(i: Int) =
if (i > 2) i.successNel
else "something wrong".failureNel
List(1, 2, 3).traverseU(f) // Failure(NonEmptyList(something wrong, something wrong))
List(3, 4, 5).traverseU(f) // Success(List(3, 4, 5))
如果您想在第一个错误时失败,您可以使用\/
,又名 scalaz 版本Either
它同构于scala.Either
但偏右
def f(i: Int) =
if (i > 2) \/-(i)
else -\/("something wrong")
List(1, 2, 3).traverseU(f) // Failure(something wrong)
List(3, 4, 5).traverseU(f) // Success(List(3, 4, 5))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)