比较两个规格值,Clojure.spec
Compare between two specs values, Clojure.spec
我将规格定义为 -
(s/def ::start integer?)
(s/def ::end integer?)
(s/def ::collection (s/keys :req-un [::start ::end]))
工作正常 (s/valid? ::collection {:start 9 :end 13})
但现在我还必须检查 start
应该小于 end
。怎么做?有没有更简单的方法来做到这一点而无需创建另一个 fn 和检查?
Spec 的 s/def
定义只是谓词。您可以在 ::collection
规范的正文中使用 s/and
,其中第一个条件是您当前拥有的条件,第二个条件是顺序谓词:
(s/def ::ordered-collection (fn [{:keys [start end]}] (< start end)))
(s/def ::collection (s/and (s/keys :req-un [::start ::end])
::ordered-collection))
我将规格定义为 -
(s/def ::start integer?)
(s/def ::end integer?)
(s/def ::collection (s/keys :req-un [::start ::end]))
工作正常 (s/valid? ::collection {:start 9 :end 13})
但现在我还必须检查 start
应该小于 end
。怎么做?有没有更简单的方法来做到这一点而无需创建另一个 fn 和检查?
Spec 的 s/def
定义只是谓词。您可以在 ::collection
规范的正文中使用 s/and
,其中第一个条件是您当前拥有的条件,第二个条件是顺序谓词:
(s/def ::ordered-collection (fn [{:keys [start end]}] (< start end)))
(s/def ::collection (s/and (s/keys :req-un [::start ::end])
::ordered-collection))