Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/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/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,因为您的评论表明它解决了您的问题。谢谢