註冊規範

除了作為規範執行的謂詞之外,你還可以使用 clojure.spec/def 全域性註冊規範。def 要求註冊的規範由名稱空間限定的關鍵字命名:

(clojure.spec/def ::odd-nums odd?)
;;=> :user/odd-nums

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

註冊後,可以在 Clojure 程式的任何位置全域性引用規範。

假設我們在 user 名稱空間中,::odd-nums 語法是:user/odd-nums 的簡寫。::將使用當前的 namesapce 限定它之前的符號。

我們可以將規範名稱傳遞給 valid?,而不是傳入謂詞,它將以相同的方式工作。