Spec简介
Clojure是一门动态类型的语言,在类型检查方面并没有C++/Java 这种静态类型语言好用,所以多个模块之间进行接口参数传递时,由于接口文档设计不严谨等原因,总会发生接口参数类型错误,参数个数不正确等问题,给代码调试带来很大的挑战,因此在Clojure 中,对接口参数的进行类型和范围的检查是非常必要的。
Spec库可用于解决上述问题,其主要实现了以下功能:① 定义、校验与保证数据结构;② 基于Spec定义生成数据。具体使用方法如下:
注意:若需要使用Spec库,则要求Clojure版本不低于1.9.0。
;; REPL
(require '[clojure.spec.alpha :as s])
;; 具体项目
(ns my.ns
(:require [clojure.spec.alpha :as s]))
谓词
Spec库支持多种方法定义spec(每个spec定义描述了一组允许的值。且其具备可组合特性),并可通过组合多个specs定义更复杂的spec。
任何符合接受单个参数并返回真值的形式的现有Clojure函数均是有效的谓词规范(Predicate Spec),我们可以借助conform
函数判断特定的数据值是否满足相应规范。
(s/conform even? 1000)
;; => 1000
conform
函数