Spec-Zone.ru › Elisp

Значение по умолчанию переменной, связанной с буфером

Глобальное значение переменной с привязкой к буферу также называется значением по умолчанию, потому что это значение, которое применяется всякий раз, когда ни текущий буфер, ни выбранная рамка не имеют собственной привязки к переменной.

Функции default-value и setq-default обращаются к значению по умолчанию переменной и изменяют его независимо от того, имеет ли текущий буфер привязку к буферу. Например, вы можете использовать setq-default для изменения значения по умолчанию paragraph-start для большинства буферов; и это будет работать даже тогда, когда вы находитесь в буфере режима C или Lisp, который имеет локальное значение для этой переменной.

Специальные формы defvar и defconst также устанавливают значение по умолчанию (если они вообще устанавливают переменную), а не любое локальное значение буфера.

Функция: default-value символ

Эта функция возвращает значение по умолчанию для символа. Это значение, которое отображается в буферах и рамках, которые не имеют своих собственных значений для этой переменной. Если символ не связан с буфером, это эквивалентно symbol-value (см. Доступ к переменным).

Функция: default-boundp символ

Функция default-boundp сообщает вам, является ли значение по умолчанию для символа ненулевым. Если (default-boundp 'foo) возвращает nil, то (default-value 'foo) получит ошибку.

default-boundp к default-value так же, как boundp к symbol-value.

Специальная форма: setq-default [символ форма]…

Эта специальная форма присваивает каждому символу новое значение по умолчанию, которое является результатом вычисления соответствующей формы. Она не вычисляет символ, но вычисляет форму. Значение формы setq-default равно значению последней формы.

Если символ не связан с буфером для текущего буфера и не помечен как автоматически связанный с буфером, setq-default имеет тот же эффект, что и setq. Если символ связан с буфером для текущего буфера, то это изменяет значение, которое будут видеть другие буферы (пока у них нет локального значения буфера), но не значение, которое видит текущий буфер.

;; In buffer ‘foo’:
(make-local-variable 'buffer-local)
     ⇒ buffer-local
(setq buffer-local 'value-in-foo)
     ⇒ value-in-foo
(setq-default buffer-local 'new-default)
     ⇒ new-default
buffer-local
     ⇒ value-in-foo
(default-value 'buffer-local)
     ⇒ new-default
;; In (the new) buffer ‘bar’:
buffer-local
     ⇒ new-default
(default-value 'buffer-local)
     ⇒ new-default
(setq buffer-local 'another-default)
     ⇒ another-default
(default-value 'buffer-local)
     ⇒ another-default
;; Back in buffer ‘foo’:
buffer-local
     ⇒ value-in-foo
(default-value 'buffer-local)
     ⇒ another-default
Функция: set-default символ значение

Эта функция похожа на setq-default, за исключением того, что символ является обычным аргументом, который вычисляется.

(set-default (car '(a b c)) 23)
     ⇒ 23
(default-value 'a)
     ⇒ 23

Переменная может быть связана с помощью let (см. Локальные переменные) со значением. Это затеняет ее глобальное значение привязкой; default-value тогда вернет значение из этой привязки, а не глобальное значение, и set-default будет предотвращен от установки глобального значения (он вместо этого изменит значение, связанное с let).

Следующие две функции позволяют ссылаться на глобальное значение, даже если оно затенено привязкой let.

Функция: default-toplevel-value символ

Эта функция возвращает глобальное значение по умолчанию для символа, которое является его значением вне любой привязки let.

(defvar variable 'global-value)
    ⇒ variable
(let ((variable 'let-binding))
  (default-value 'variable))
    ⇒ let-binding
(let ((variable 'let-binding))
  (default-toplevel-value 'variable))
    ⇒ global-value
Функция: set-default-toplevel-value символ значение

Эта функция устанавливает глобальное значение по умолчанию для символа на заданное значение. Это полезно, когда вы хотите установить глобальное значение символа независимо от того, выполняется ли ваш код в контексте привязки let для символа.

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/Default-Value.html

Spec-Zone.ru

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