有没有办法为(s/keys :opt [::k1 ::k2])中提到的键指定默认值
类似于:
(s/keys :opt [(with-default ::k1 "default1") (with-default ::k2 "default2")])或者在clojure.spec之外处理缺省值更惯用?
发布于 2016-08-04 05:39:02
我不这么认为,因为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"]发布于 2017-01-16 23:32:11
在规范中没有明确的特性,我希望你在代码中处理它,而不是在规范中。
可以用s/conformer构建一些可以做到这一点的东西,但我不认为这是该功能的推荐用法。
https://stackoverflow.com/questions/38748074
复制相似问题