5.9.1 属性表与关联表

关联表(see 关联列表)与属性表非常相似。与关联表不同的是,属性表中键值对的顺序并不重要,因为属性名必须互不相同。

在为各种 Lisp 函数名或变量附加信息时,属性表要优于关联表。如果你的程序把所有这类信息都存放在一个关联表里,那么每次查找某个特定 Lisp 函数名或变量的关联信息时,通常都需要遍历整个列表,这可能会很慢。相比之下,如果你把同样的信息存放在函数名或变量自身的属性表中,那么每次搜索只需扫描单个属性表的长度,而这个长度通常很短。这也是变量的文档信息会被记录在名为 variable-documentation 的属性中的原因。字节编译器同样使用属性来记录那些需要特殊处理的函数。

不过,关联表也有自己的优势。根据应用场景不同,往关联表的头部添加一个关联项,可能会比更新一个属性更快。一个符号的所有属性都存放在同一个属性表里,因此不同用途之间可能出现属性名冲突。(出于这个原因,最好选择具有唯一性的属性名,例如用程序自身的变量与函数命名前缀作为属性名的开头。)关联表可以像栈一样使用:把关联项压入表的头部,之后再丢弃;这一点是属性表做不到的。

emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© 2025 Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike