除了充当规范的谓词外,您还可以使用全局注册一个规范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程序中的任何地方全局引用规范。
该::odd-nums语法是一个速记:user/odd-nums,假设我们在user命名空间。::将使用当前名称空间限定其前面的符号。
除了传递谓词外,我们还可以将规范名称传递给valid?,它将以相同的方式工作。