【发布时间】:2012-02-14 08:30:44
【问题描述】:
我一直在寻找,但找不到隐式转换器。显然写一个是微不足道的,但我想知道我是否在 scalaz 库中以某种方式错过了一个!
【问题讨论】:
我一直在寻找,但找不到隐式转换器。显然写一个是微不足道的,但我想知道我是否在 scalaz 库中以某种方式错过了一个!
【问题讨论】:
Scalaz 有一个 Option 到 OptionW 的隐式转换,它声明了 toFailure 和 toSuccess 方法。
【讨论】:
toValidationNel 是一种可用于验证而非选项的方法。
import scalaz.syntax.std.option._; myOption.toSuccessNel(myError)
基本上,您有将“Some”转换为“happy path”的方法(在 Validation -> Success 的情况下,在 Disjunction 的情况下 \/-),然后您需要为 None 定义错误描述。
我在收到可选参数时使用它,如果没有提供,我想引发错误。
例子:
scala> import scalaz.Scalaz._
import scalaz.Scalaz._
scala> import scalaz._
import scalaz._
scala> Some("clientId123").toSuccessNel("Client id is mandatory")
res0: scalaz.ValidationNel[String,String] = Success(clientId123)
scala> None.toSuccessNel("Client id is mandatory")
res1: scalaz.ValidationNel[String,Nothing] = Failure(NonEmpty[Client id is mandatory])
如果您使用应用程序累积错误,则可以向最终用户提供全面的错误消息,例如:
Client id is mandatory, country is mandatory, etc
【讨论】: