Spec-Zone.ru › Elisp

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

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

Spec-Zone.ru

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