clojure.spec /和&clojure.spec /或

示例

clojure.spec/and&clojure.spec/or可用于使用多个规范或谓词来创建更复杂的规范:

(clojure.spec/def ::pos-odd (clojure.spec/and odd? pos?))

(clojure.spec/valid? ::pos-odd 1)
;;=> true

(clojure.spec/valid? ::pos-odd -3)
;;=> false

or工作原理相似,但有很大的不同。定义or规范时,必须使用关键字标记每个可能的分支。这是为了提供在错误消息中失败的特定分支:

(clojure.spec/def ::big-or-small (clojure.spec/or :small #(< % 10) :big #(> % 100)))

(clojure.spec/valid? ::big-or-small 1)
;;=> true

(clojure.spec/valid? ::big-or-small 150)
;;=> true

(clojure.spec/valid? ::big-or-small 20)
;;=> false

使用符合规格时or,将返回适用的规格,该规格使值符合:

(clojure.spec/conform ::big-or-small 5)
;; => [:small 5]