在clojure.spec中提供默认值

provide default value in clojure.spec

是否可以为(s/keys :opt [::k1 ::k2])中提到的键指定默认值?

类似的东西:

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

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


我不这么认为,因为clojure.spec主要涉及数据验证和结构,而不涉及数据的丰富,强制或更改。因此,您将必须自己做。例如:

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

或使用关联解构:

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

或类似地:

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


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

可以使用s/conformer构建某些功能来实现此目的,但是我不认为建议使用该功能。