1

我已将规格定义为-

(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 并检查的情况下做到这一点?

4

1 回答 1

2

Spec 的s/def定义只是谓词。您可以s/and在规范正文中使用::collection,其中第一个条件是您当前拥有的条件,第二个条件是订单谓词:

(s/def ::ordered-collection (fn [{:keys [start end]}] (< start end)))

(s/def ::collection (s/and (s/keys :req-un [::start ::end])
                           ::ordered-collection))
于 2018-02-10T07:44:42.797 回答