我最近使用ScalaZ进行验证,并决定选择ValidationNel,因为不需要快速失败行为。我有超过12次验证检查,因此我无法使用operator | @ |所以我用< *>表达了它那样:
validatePropertyA(object.propertyA) <*>
(validatePropertyB(object.propertyB) <*>
(validatePropertyC(object.propertyC) map (_ => _ => _ => object)))
有大约15个要检查的属性,这个代码变得相当复杂,并且第一眼看起来就像用foldRight表示的东西,但我不知道如何实现这一点。
foldRight对于使这段代码简洁或是否必须使用别的东西是可行的吗?
答案 0 :(得分:1)
您可以使用traverse
或sequence
:
List(validatePropertyA(object.propertyA), validatePropertyB(object.propertyB), ...)
.sequence.map(_ => object)
这会返回Validated
左侧的所有错误和右侧的object
。