【发布时间】: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
有没有办法为(s/keys :opt [::k1 ::k2]) 中提到的键指定默认值?
类似:
(s/keys :opt [(with-default ::k1 "default1") (with-default ::k2 "default2")])
或者在 clojure.spec 之外处理默认值更习惯?
【问题讨论】:
标签: clojure clojure.spec
我不这么认为,因为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"]
【讨论】:
规范中没有明确的功能,我希望您在代码中处理它,而不是在规范中。
可以使用s/conformer 构建一些功能,但我不认为推荐使用该功能。
【讨论】: