Сравните между двумя значениями спецификации, 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 и проверки?

1 ответ

Решение

Spec-х s/def определения являются просто предикатами. Ты можешь использовать s/and в теле вашего ::collection spec, где первое условие будет тем, что у вас есть, а второе будет предикатом порядка:

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

(s/def ::collection (s/and (s/keys :req-un [::start ::end])
                           ::ordered-collection))
Другие вопросы по тегам