9.4.1 Доступ к свойствам символов

Для доступа к свойствам символов можно использовать следующие функции.

Функция: get symbol property

Эта функция возвращает значение свойства с именем property в списке свойств symbol. Если такого свойства нет, она возвращает nil. Таким образом, нет различия между значением nil и отсутствием свойства.

Имя property сравнивается с существующими именами свойств с помощью eq, поэтому любым объектом может быть легитимным свойством.

См. put для примера.

Функция: 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))
Функция: symbol-plist symbol

Эта функция возвращает список свойств symbol.

Функция: 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)

Для символов в специальных массивах объектов, которые не используются для обычных целей, может иметь смысл использовать ячейку списка свойств нестандартным образом; на самом деле, механизм сокращений это делает (см. Сокращения и расширение сокращений).

Вы можете определить put на основе setplist и plist-put следующим образом:

(defun put (symbol prop value)
  (setplist symbol
            (plist-put (symbol-plist symbol) prop value)))
Функция: function-get symbol property &optional autoload

Эта функция идентична get, за исключением того, что если symbol является именем алиаса функции, она ищет в списке свойств символа, который именует фактическую функцию. См. Определение функций. Если необязательный аргумент autoload не равен nil, и symbol загружается автоматически, эта функция попытается загрузить его автоматически, поскольку автоматическая загрузка может установить property для symbol. Если autoload — это символ macro, попытаться загрузить автоматически только в том случае, если symbol является автоматически загружаемой макросом.

Функция: function-put function property value

Эта функция устанавливает property function в value. function должен быть символом. Эта функция предпочтительнее вызова put для установки свойств функции, потому что это позволит нам в будущем реализовать переназначение старых свойств на новые.