Значение по умолчанию буферно-локальной переменной
Глобальное значение переменной с буферно-локальными привязками также называется значением по умолчанию, поскольку именно оно действует, когда в текущем буфере нет собственной привязки этой переменной.
Функции default-value и setq-default позволяют получать и изменять значение переменной по умолчанию независимо от того, есть ли у текущего буфера буферно-локальная привязка этой переменной. Например, можно использовать setq-default, чтобы изменить значение по умолчанию для paragraph-start в большинстве буферов; это будет работать, даже если вы находитесь в буфере в режиме C или Lisp, где у этой переменной есть буферно-локальное значение.
Специальные формы defvar и defconst также задают значение по умолчанию (если они вообще задают значение переменной), а не какое-либо буферно-локальное значение.
- Функция: default-value symbol
Эта функция возвращает значение по умолчанию для symbol. Это значение используется в буферах и фреймах, у которых нет собственных значений этой переменной. Если symbol не является буферно-локальной переменной, это эквивалентно
symbol-value(см. Доступ к значениям переменных).
- Функция: default-boundp symbol
-
Функция
default-boundpсообщает, является ли значение по умолчанию для symbol заданным. Если(default-boundp 'foo)возвращаетnil, вызов(default-value 'foo)приведёт к ошибке.default-boundpотносится кdefault-valueтак же, какboundpотносится кsymbol-value.
- Специальная форма: setq-default [symbol form]…
-
Эта специальная форма присваивает каждому symbol новое значение по умолчанию, которым становится результат вычисления соответствующего form. Она не вычисляет symbol, но вычисляет form. Значением формы
setq-defaultявляется значение последнего form.Если symbol не является буферно-локальной переменной для текущего буфера и не помечен как автоматически буферно-локальный,
setq-defaultдействует так же, какsetq. Если symbol является буферно-локальной переменной для текущего буфера, эта форма изменяет значение, которое будут видеть другие буферы (если у них нет буферно-локального значения), но не значение, которое видит текущий буфер.;; 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-defaultbuffer-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 symbol value
-
Эта функция похожа на
setq-default, за исключением того, что symbol является обычным вычисляемым аргументом.(set-default (car '(a b c)) 23) ⇒ 23(default-value 'a) ⇒ 23
Переменной можно присвоить значение с помощью let-привязки (см. Локальные переменные). При этом привязка затеняет её глобальное значение; тогда default-value возвращает значение из этой привязки, а не глобальное значение, и set-default не сможет задать глобальное значение (вместо этого оно изменит значение, заданное let-привязкой). Следующие две функции позволяют обращаться к глобальному значению, даже если оно затенено let-привязкой.
- Функция: default-toplevel-value symbol
Эта функция возвращает значение по умолчанию верхнего уровня для symbol, то есть значение вне любой 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 symbol value
Эта функция задаёт для symbol указанное value в качестве значения по умолчанию верхнего уровня. Это удобно, когда нужно задать глобальное значение symbol независимо от того, выполняется ли ваш код в контексте let-привязки symbol.
Буферно-локальное значение переменной также может быть затенено let-привязкой. Две функции позволяют получать и задавать буферно-локальное значение переменной верхнего уровня, то есть значение вне let-привязки.
- Функция: buffer-local-toplevel-value symbol &optional buffer
Эта функция возвращает локальное значение symbol в buffer (по умолчанию — в текущем буфере) вне любой let-привязки. Если symbol не является локальной переменной в buffer, функция сигнализирует об ошибке.
- Функция: set-buffer-local-toplevel-value symbol value &optional buffer
-
Эта функция задаёт локальное значение symbol равным value в buffer (по умолчанию — в текущем буфере) вне любой let-привязки.
Если symbol ещё не является локальной переменной в buffer, она становится локальной. Для глобальных переменных это означает, что у symbol будет отдельное значение в buffer; для переменных, которые автоматически становятся буферно-локальными, эта функция создаёт для них локальное значение в buffer. Если symbol является постоянно буферно-локальной переменной, value будет сохраняться как буферно-локальное значение переменной при смене основного режима.
Это полезно, когда нужно изменить буферно-локальное значение так, чтобы оно сохранилось после завершения выполняемой команды, а код может выполняться, пока эта переменная связана через let-привязку. В этом случае обычный способ задания буферно-локальных значений с помощью
setq-localизменит только значение внутри let-привязки, а не лежащее в основе буферно-локальное значение. Эта функция задаёт последнее.
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/Default-Value.html