数据类型
elisp 里的对象都是有类型的,而且每一个对象它们知道自己是什么类型
得到一个变量名之后可以用一系列检测方法来测试这个变量是什么类型 好像没有什么方法来让它说出自己是什么类型的
内建的 emacs 数据类型称为 primitive types,包括 整数 、 浮点数 、 cons 、 符号(symbol) 、 字符串 、 向量(vector) 、 散列表(hash-table) 、subr(内建函数,比如 cons, if, and 之类)、 byte-code function ,和其它特殊类型,例如 缓冲区(buffer)
在开始前有必要先了解一下读入语法和输出形式:
读入语法 :让 elisp 解释器明白输入字符所代表的对象,简单的来说,一种数据类型有(也可能没有,比如散列表)对应的规则来让解释器产生这种数据类型
比如 123 产生整数 123,(a . b) 产生一个 cons 当然不可能让 elisp 读入 .#@!? 这样奇怪的东西还能好好工作吧(perl好像经常要受这样的折磨:))
- 输出形式 :解释器用产生一个字符串来表示一个数据对象
比如整数 123 的输出形式就是 123,cons cell (a . b) 的输出形式是 (a . b)
与读入语法不同的是,数据对象都有输出形式。比如散列表的输出可能是这样的:
#<hash-table 'eql nil 0/65 0xa7344c8>
通常一个对象的数据对象的输出形式和它的读入形式都是相同的
- 数字
- 字符串
- 列表
- 数组
- 符号