【问题标题】:Is there a built in way of converting Option to a scalaz validation?是否有将 Option 转换为 scalaz 验证的内置方法?
【发布时间】:2012-02-14 08:30:44
【问题描述】:

我一直在寻找,但找不到隐式转换器。显然写一个是微不足道的,但我想知道我是否在 scalaz 库中以某种方式错过了一个!

【问题讨论】:

    标签: scala scalaz


    【解决方案1】:

    Scalaz 有一个 OptionOptionW 的隐式转换,它声明了 toFailuretoSuccess 方法。

    【讨论】:

    • 你能提供一个例子吗?我尝试使用导入的 scalaz._ 和 Scalaz._ 进行此操作,但仍然收到“错误:值 toValidationNel 不是 Option 的成员”
    • OptionOps 不会为您转换吗?
    • toValidationNel 是一种可用于验证而非选项的方法。
    • import scalaz.syntax.std.option._; myOption.toSuccessNel(myError)
    【解决方案2】:

    基本上,您有将“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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-04
      • 1970-01-01
      • 2012-12-30
      • 2022-07-25
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 2012-12-21
      相关资源
      最近更新 更多