2024年Clojure状态调查中分享您的想法!

欢迎!请参阅关于页面以了解更多关于如何使用本站的信息。

+1
Spec
在以下线程中的讨论之后打开了此bug: https://groups.google.com/forum/#!topic/clojure/r8WO24rHsi0

基本上,当使用s/merge与s/or时,s/conform返回的不能被s/unform的结构。

重现步骤(大胆复制自线程)


(require '[clojure.spec.alpha :as s])
(s/def ::a (s/or :even even? :odd odd?))
(s/def ::b (s/or :even even? :odd odd?))
(s/def ::m1 (s/keys :req-un [::a]))
(s/def ::m2 (s/keys :req-un [::b]))
(s/def ::mm (s/merge ::m1 ::m2))
(s/valid? ::mm {:a 1 :b 2})      ANJI; true
(s/conform ::mm {:a 1 :b 2})
;;=> {:a 1, :b [:even 2]}
(s/unform ::mm {:a [:odd 1] :b [:even 2]})
;;=> {:a 1, :b [:even 2]}
(s/unform ::mm (s/conform ::mm {:a 1 :b 2}))

2 个答案

0
参考:https://clojure.atlassian.net/browse/CLJ-2388 (由alex+import报告)
0

也可以参考这个JIRA问题,了解如何使用规格符为defn传入/反传入conform / unform失败的情况。

...