类型说明符是表示一种类型的表达式。类型代表一组可能的取值。类型说明符可分为基本类型与复合类型。
类型说明符有多种用途,包括:通过声明来为函数接口提供文档(see declare 形式)、指定结构体槽位类型(see Structures in Common Lisp Extensions for GNU Emacs Lisp)、使用 cl-the 进行类型检查(see Declarations in Common Lisp Extensions for GNU Emacs Lisp),以及帮助本地编译器(see Lisp 本地代码编译)优化代码生成和推断函数签名。
基本类型说明符是基础类型(即不由其他类型说明符组合而成)。
内置的基本类型(如 integer整数、float浮点数、string字符串等)列于 Emacs Lisp 对象的类型层次 中。
复合类型用于通过组合或修改简单类型,定义更复杂或更精确的类型规范。
复合类型说明符列表:
(or type-1 … type-n)or 类型说明符表示一个类型,它满足给定类型中的至少一种。
(and type-1 … type-n)类似地,and 类型说明符表示一个类型,它满足所有给定类型。
(not type)not 类型说明符表示除指定类型外的任意类型。
(member value-1 … value-n)member 类型说明符用于定义一个只包含显式列出的值的类型。
(function (arg-1-type … arg-n-type) return-type) ¶function 类型说明符用于描述函数的参数类型和返回值类型。参数类型中可以穿插 &optional 和 &rest 符号,以匹配函数的参数形式(see 参数列表的特性)。
下面的类型说明符表示一个函数:第一个参数为 symbol符号 类型,第二个为可选 float浮点数 类型,返回值为 integer整数 类型:
(function (symbol &optional float) integer)
(integer lower-bound upper-bound)integer整数 类型说明符也可以作为复合类型说明符,通过指定范围来定义整数的子集。这可以精确控制哪些整数对给定类型有效。
lower-bound 是范围中的最小整数,upper-bound 是最大整数。你可以用 * 代替下界或上界,表示无限制。
下面表示从 -10 到 10 的所有整数:
(integer -10 10)
下面表示单个值 10:
(integer 10 10)
下面表示从负无穷到 10 的所有整数:
(integer * 10)