我有一个验证对象Scalaz验证,验证内值
val v = Validation[String, Option[Int]]
我需要进行第二次的验证,以检查是否实际整数值是等于100例如。如果我做
val vv = v.map(_.map(intValue => if (intValue == 100)
intValue.success[String]
else
"Bad value found".fail[Integer]))
我得到:
Validation[String, Option[Validation[String, Int]]]
怎么可能让维维也为验证[字符串,选项[INT]]中最简洁的方式
====从我自己=====
找到可行的解决方案:
val validation: Validation[String, Option[Int]] = Some(100).success[String]
val validatedTwice: Validation[String, Option[Int]] = validation.fold(
_ => validation, // if Failure then return it
_.map(validateValue _) getOrElse validation // validate Successful result
)
def validateValue(value: Int): Validation[String, Option[Int]] = {
if (value == 100)
Some(value).success[String]
else
"Bad value".fail[Option[Int]]
}
看起来不简洁大方,虽然它的工作原理
==============
从我自己的解决方案二,但看起来也过compicated:
val validatedTwice2: Validation[String, Option[Int]] = validation.flatMap(
_.map(validateValue _).map(_.map(Some(_))) getOrElse validation)
def validateValue(value: Int): Validation[String, Int] = {
if (value == 100)
value.success[String]
else
"Bad value".fail[Int]
}
为什么'parseInt'? – 2012-02-06 19:52:57