Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在clojure.spec中提供默认值_Clojure_Clojure.spec - Fatal编程技术网

在clojure.spec中提供默认值

在clojure.spec中提供默认值,clojure,clojure.spec,Clojure,Clojure.spec,有没有办法为(s/keys:opt[::k1::k2])中提到的键指定默认值 比如: (s/keys :opt [(with-default ::k1 "default1") (with-default ::k2 "default2")]) 或者在clojure.spec之外处理默认值更为惯用?我不这么认为,因为clojure.spec主要关注数据验证和结构,而不是丰富、强制或更改数据。所以你必须自己做。例如: (merge {::k1 "default" ::k2 "default"} {:

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

比如:

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

或者在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"]

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


<> p>可以用“代码> S/SCONTION/CODE >来构建这一点,但是我不认为这是一个推荐使用。

我同意,但是文档说Culjur.St/Currand可以修改它的输入。例如,当:into参数被赋予clojure.spec/coll-of时