在clojure.spec中提供默认值

时间:2016-08-03 15:38:29

标签: clojure clojure.spec

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

类似的东西:

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

或者处理clojure.spec之外的默认值更为惯用?

2 个答案:

答案 0 :(得分:1)

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

(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"]

答案 1 :(得分:1)

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

可以使用s/conformer构建一些可以执行此操作的内容,但我不会考虑建议使用该功能。