Псевдонимы переменных
Иногда бывает полезно сделать две переменные синонимами, чтобы обе переменные всегда имели одно и то же значение, а изменение одной из них также изменяло другую. Если вы меняете имя переменной — потому что понимаете, что прежнее имя было выбрано неудачно, или потому что её значение частично изменилось, — для обеспечения совместимости может быть полезно сохранить старое имя как псевдоним нового. Это можно сделать с помощью 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