比较两个规格值Clojure.spec
我将规格定义为-比较两个规格值Clojure.spec,clojure,clojure.spec,Clojure,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定义只是谓词。您可以在::集合规范的
(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
定义只是谓词。您可以在::集合
规范的主体中使用s/和
,其中第一个条件是您当前拥有的条件,第二个条件是顺序谓词:
(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::有序集合(fn[{:keys[start-end]}](
它给出了一个错误。无法解析spec::structure clojure.spec.alpha/reg-resolve!(alpha.clj:69)抱歉修复了解决方案,没有办法检查它。您可以使用repl检查和函数的正确签名。请记住接受@edvorg answer,因为您的评论表明它解决了您的问题。谢谢