Lisp object对象 是 Lisp 程序使用和操作的数据单元。对我们而言,type类型 或 data type数据类型 是一组可能的对象集合。
每个对象至少属于一种类型。同一类型的对象具有相似的结构,通常可在相同的上下文中使用。类型之间可以重叠,一个对象可以属于两种或更多类型。因此,我们可以判断一个对象是否属于某一特定类型,但不能说一个对象唯一的类型是什么。
Emacs 内置了少量基础对象类型,所有其他类型都由这些类型构造而成,它们被称为 primitive types基本类型。每个对象有且仅属于一种基本类型。这些类型包括:integer整数、float浮点数、cons单元、symbol符号、string字符串、vector向量、hash-table哈希表、subr子程序、byte-code function字节码函数和recor记录,此外还有若干与编辑相关的特殊类型,如buffer缓冲区等。(See 编辑类型。)
每种基本类型都有对应的 Lisp 函数,用于检查一个对象是否属于该类型。
Lisp 与许多其他语言不同之处在于它的对象是 self-typing自描述类型:每个对象的基本类型隐含在对象自身中。例如,如果一个对象是向量,任何代码都不能把它当作数字;Lisp 本身就知道它是向量而非数字。
在大多数语言中,程序员必须为每个变量声明数据类型,类型由编译器知晓,但不体现在数据中。Emacs Lisp 中不存在这类类型声明。Lisp 变量可以存放任意类型的值,并且会完整保留你存入的值及其类型。(实际上,极少数 Emacs Lisp 变量只能接受特定类型的值。See 受限值变量。)
本章介绍 GNU Emacs Lisp 中每种标准类型的用途、打印表示和读入语法。有关如何使用这些类型的详细内容将在后续章节说明。