Псевдонимы переменных
Иногда полезно сделать две переменные синонимами, чтобы обе переменные всегда имели одинаковое значение, а изменение одной также изменяло другую. Всякий раз, когда вы меняете имя переменной — либо потому, что вы понимаете, что старое имя было неудачным, либо потому, что её значение частично изменилось — может быть полезно сохранить старое имя как псевдоним нового для совместимости. Вы можете сделать это с помощью defvaralias.
- Функция: defvaralias новый-псевдоним базовая-переменная &optional строка-документации
-
Эта функция определяет символ новый-псевдоним как псевдоним для символа базовая-переменная. Это означает, что получение значения новый-псевдоним возвращает значение базовая-переменная, а изменение значения новый-псевдоним изменяет значение базовая-переменная. Два алиасных имени переменных всегда разделяют одно и то же значение и одни и те же привязки.
Если аргумент строка-документации не
nil, он задаёт документацию для новый-псевдоним; в противном случае псевдоним получает ту же документацию, что и у базовая-переменная, если таковая есть, если только базовая-переменная сама не является псевдонимом, в этом случае новый-псевдоним получает документацию переменной в конце цепочки псевдонимов.Эта функция возвращает базовая-переменная.
Псевдонимы переменных удобны для замены старого имени переменной новым именем. make-obsolete-variable объявляет, что старое имя устарело и, следовательно, может быть удалено на некотором этапе в будущем.
- Функция: make-obsolete-variable устаревшее-имя текущее-имя когда &optional тип-доступа
-
Эта функция заставляет байт-компилятор предупреждать, что переменная устаревшее-имя устарела. Если текущее-имя — символ, это новое имя переменной; тогда сообщение об ошибке указывает на использование текущее-имя вместо устаревшее-имя. Если текущее-имя — строка, это сообщение, и нет переменной замены. когда должна быть строка, указывающая, когда переменная была впервые сделана устаревшей (обычно это строка номера версии).
Необязательный аргумент тип-доступа, если он не
nil, должен указать тип доступа, который вызовет предупреждения об устарелости; он может быть либоget, либоset.
Вы можете сделать две переменные синонимами и объявить одну устаревшей одновременно, используя макрос define-obsolete-variable-alias.
- Макрос: define-obsolete-variable-alias устаревшее-имя текущее-имя &optional когда строка-документации
-
Этот макрос помечает переменную устаревшее-имя как устаревшую, а также делает её псевдонимом для переменной текущее-имя. Он эквивалентен следующему:
(defvaralias obsolete-name current-name docstring) (make-obsolete-variable obsolete-name current-name when)
Этот макрос вычисляет все свои параметры, и как устаревшее-имя, так и текущее-имя должны быть символами, поэтому типичное использование будет выглядеть следующим образом:
(define-obsolete-variable-alias 'foo-thing 'bar-thing "27.1")
- Функция: indirect-variable переменная
-
Эта функция возвращает переменную в конце цепочки псевдонимов переменная. Если переменная не является символом или если переменная не определена как псевдоним, функция возвращает переменная.
Эта функция сигнализирует об ошибке
cyclic-variable-indirectionпри наличии цикла в цепочке символов.
(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-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Variable-Aliases.html