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