Для доступа к свойствам символов можно использовать следующие функции.
Эта функция возвращает значение свойства с именем property
в списке свойств symbol. Если такого свойства нет, она
возвращает nil. Таким образом, нет различия между
значением nil и отсутствием свойства.
Имя property сравнивается с существующими именами свойств
с помощью eq, поэтому любым объектом может быть легитимным свойством.
См. put для примера.
Эта функция помещает 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))
Эта функция возвращает список свойств symbol.
Эта функция устанавливает список свойств 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)
Для символов в специальных массивах объектов, которые не используются для обычных целей, может иметь смысл использовать ячейку списка свойств нестандартным образом; на самом деле, механизм сокращений это делает (см. Сокращения и расширение сокращений).
Вы можете определить put на основе setplist и
plist-put следующим образом:
(defun put (symbol prop value)
(setplist symbol
(plist-put (symbol-plist symbol) prop value)))
Эта функция идентична get, за исключением того, что если symbol
является именем алиаса функции, она ищет в списке свойств символа, который
именует фактическую функцию. См. Определение функций.
Если необязательный аргумент autoload не равен nil,
и symbol загружается автоматически, эта функция попытается загрузить
его автоматически, поскольку автоматическая загрузка может установить property
для symbol. Если autoload — это символ macro,
попытаться загрузить автоматически только в том случае, если symbol
является автоматически загружаемой макросом.
Эта функция устанавливает property function в value.
function должен быть символом. Эта функция предпочтительнее вызова
put для установки свойств функции, потому что это позволит нам в будущем
реализовать переназначение старых свойств на новые.