clojure.specand clojure.specor
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]