在我为自己的库进行spec过程中,遇到了一个使用 s/unform
和 s/?
的问题,我认为这个行为有点奇怪。
(require '[clojure.core.specs.alpha :as cs])
(def binding-form '[a b :as c])
(def x (s/conform ::cs/seq-binding-form binding-form))
;; x => {:forms [[:local-symbol a] [:local-symbol b]], :as-form {:as :as, :as-sym c}}
(s/unform ::cs/seq-binding-form x)
;; => (a b (:as c))
(s/valid? ::cs/seq-binding-form (s/unform ::cs/seq-binding-form x))
;; => false
这是预期行为吗?根据直觉,我原本预期第一次unform会生成原始形式,并且unform的结果会通过(使用相同的spec)进行验证。