注册规范

除了作为规范运行的谓词之外,你还可以使用 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?,而不是传入谓词,它将以相同的方式工作。