9.4.1 访问符号属性

以下函数可用于访问符号的属性。

Function: get symbol property

该函数返回 symbol(符号)的属性列表中,名为 property(属性名)的属性对应的值。若不存在该属性,则返回 nil。因此,属性值为 nil 与属性不存在这两种情况无法区分。

属性名 property 会通过 eq 函数与已有的属性名进行比较,因此任意对象都可以作为合法的属性名。

可参见 put 函数的说明以查看示例。

Function: put symbol property value

该函数将值 value 存入 symbol(符号)的属性列表中,并关联到属性名 property 之下;若该属性名已存在,则覆盖其原有值。put 函数的返回值为 value

(put 'fly 'verb 'transitive)
     ⇒'transitive
(put 'fly 'noun '(a buzzing little bug))
     ⇒ (a buzzing little bug)
(get 'fly 'verb)
     ⇒ transitive
(symbol-plist 'fly)
     ⇒ (verb transitive noun (a buzzing little bug))
Function: symbol-plist symbol

该函数返回 symbol(符号)的属性列表。

Function: setplist symbol plist

该函数将 symbol(符号)的属性列表设置为 plist。通常情况下,plist 应当是格式规范的属性列表,但这一要求不会被强制校验。该函数的返回值为 plist

(setplist 'foo '(a 1 b (2 3) c nil))
     ⇒ (a 1 b (2 3) c nil)
(symbol-plist 'foo)
     ⇒ (a 1 b (2 3) c nil)

对于专用符号表(special obarrays)中的符号(并非用于普通用途),以非标准方式使用其属性列表单元是合理的;事实上,*缩写机制(abbrev mechanism) 正是这么做的(see Abbrevs and Abbrev Expansion)。

你可以通过 setplistplist-put 来定义 put,示例如下:

(defun put (symbol prop value)
  (setplist symbol
            (plist-put (symbol-plist symbol) prop value)))
Function: function-get symbol property &optional autoload

该函数与 get 完全相同,区别在于:如果 symbol 是某个函数别名,它会去查找实际函数对应符号的属性列表。See 定义函数。 如果可选参数 autoload 为非 nil,且 symbol 是自动加载函数,该函数会尝试自动加载它,因为自动加载可能会设置该符号的 property。如果 autoload 为符号 macro,则仅当 symbol 是自动加载宏时,才尝试自动加载。

Function: function-put function property value

该函数将 functionproperty 属性设为 valuefunction 应当是一个符号。 在设置函数属性时,推荐使用此函数,而非直接调用 put,因为未来它可以支持将旧属性自动映射到新属性。


emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© 2025 Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike