【问题标题】:provide default value in clojure.spec在 clojure.spec 中提供默认值
【发布时间】:2016-08-03 15:38:29
【问题描述】:

有没有办法为(s/keys :opt [::k1 ::k2]) 中提到的键指定默认值?

类似:

(s/keys :opt [(with-default ::k1 "default1") (with-default ::k2 "default2")])

或者在 clojure.spec 之外处理默认值更习惯?

【问题讨论】:

    标签: clojure clojure.spec


    【解决方案1】:

    我不这么认为,因为clojure.spec 主要关注数据验证和结构,而不是丰富、强制或更改数据。所以你必须自己做。例如:

    (merge {::k1 "default" ::k2 "default"} {::k1 2}) ;;=> {::k1 2, ::k2 "default"}
    

    或使用关联解构:

    (let [{k1 ::k1 k2 ::k2 :or {k1 "default", k2 "default"}} 
          {::k1 2}] 
      [k1 k2]) ;; => [2 "default"]
    

    或类似:

    (let [{:keys [::k1 ::k2] :or {k1 "default" k2 "default"}} 
          {::k1 2}] 
      [k1 k2]) ;; => [2 "default"]
    

    【讨论】:

    • 我同意,但文档说 clojure.spec/conform 可能会修改它的输入。例如,当 :into 参数被赋予 clojure.spec/coll-of
    【解决方案2】:

    规范中没有明确的功能,我希望您在代码中处理它,而不是在规范中。

    可以使用s/conformer 构建一些功能,但我不认为推荐使用该功能。

    【讨论】:

      猜你喜欢
      • 2020-05-04
      • 1970-01-01
      • 1970-01-01
      • 2014-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-08
      相关资源
      最近更新 更多