Spec-Zone.ru › Elisp

Псевдонимы переменных

Иногда бывает полезно сделать две переменные синонимами, чтобы обе переменные всегда имели одно и то же значение, а изменение одной из них также изменяло другую. Если вы меняете имя переменной — потому что понимаете, что прежнее имя было выбрано неудачно, или потому что её значение частично изменилось, — для обеспечения совместимости может быть полезно сохранить старое имя как псевдоним нового. Это можно сделать с помощью defvaralias.

Функция: defvaralias new-alias base-variable &optional docstring

Эта функция определяет символ new-alias как псевдоним переменной base-variable. Это означает, что при получении значения new-alias возвращается значение base-variable, а изменение значения new-alias изменяет значение base-variable. Оба имени переменных-псевдонимов всегда имеют одно и то же значение и одни и те же привязки.

Если аргумент docstring не равен nil, он задаёт документацию для new-alias; в противном случае псевдоним получает ту же документацию, что и base-variable, если она есть, за исключением случая, когда base-variable сам является псевдонимом: тогда new-alias получает документацию переменной в конце цепочки псевдонимов.

Эта функция возвращает base-variable.

Если в результате цепочка определений переменных окажется циклической, Emacs выдаст ошибку cyclic-variable-indirection.

Псевдонимы переменных удобны для замены старого имени переменной новым. make-obsolete-variable объявляет старое имя устаревшим, а значит, его можно будет удалить в будущем.

Функция: make-obsolete-variable obsolete-name current-name when &optional access-type

Эта функция указывает компилятору байт-кода выдавать предупреждение о том, что переменная obsolete-name устарела. Если current-name — символ, это новое имя переменной; в таком случае в сообщении с предупреждением предлагается использовать current-name вместо obsolete-name. Если current-name — строка, она задаёт сообщение (после обработки функцией substitute-command-keys), и замещающей переменной нет. Аргумент when должен быть строкой, указывающей, когда переменная впервые была объявлена устаревшей (обычно это строка с номером версии).

Необязательный аргумент access-type, если он не равен nil, должен указывать тип обращения, при котором будут выдаваться предупреждения об устаревании; его значение может быть get или set.

Можно одновременно сделать две переменные синонимами и объявить одну из них устаревшей с помощью макроса define-obsolete-variable-alias.

Макрос: define-obsolete-variable-alias obsolete-name current-name when &optional docstring

Этот макрос помечает переменную obsolete-name как устаревшую и одновременно делает её псевдонимом переменной current-name. Он эквивалентен следующему:

(defvaralias obsolete-name current-name docstring)
(make-obsolete-variable obsolete-name current-name when)

Этот макрос вычисляет все свои параметры, а obsolete-name и current-name должны быть символами, поэтому типичный пример использования выглядит так:

(define-obsolete-variable-alias 'foo-thing 'bar-thing "27.1")
Функция: indirect-variable variable

Эта функция возвращает переменную в конце цепочки псевдонимов для variable. Если variable не является символом или не определена как псевдоним, функция возвращает variable.

(defvaralias 'foo 'bar)
(indirect-variable 'foo)
     ⇒ bar
(indirect-variable 'bar)
     ⇒ bar
(setq bar 2)
bar
     ⇒ 2
foo
     ⇒ 2
(setq foo 0)
bar
     ⇒ 0
foo
     ⇒ 0

Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Variable-Aliases.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API