Когда переменная пустая
Мы говорим, что переменная пустая, если у её символа есть ячейка значения, не имеющая присвоенного значения (см. Компоненты символов).
В соответствии с правилом динамического области действия по умолчанию Emacs Lisp (см. Область действия переменных), ячейка значения хранит текущее (локальное или глобальное) значение переменной. Обратите внимание, что пустая ячейка значения — это не то же самое, что иметь nil в ячейке значения. Символ nil является объектом Lisp и может быть значением переменной, как и любой другой объект; но это всё равно значение. Если переменная пустая, попытка вычисления переменной сигнализирует об ошибке void-variable, вместо возвращения значения.
Согласно дополнительному правилу лексического области действия, ячейка значения содержит только глобальное значение переменной — значение вне любого конструктора лексического связывания. Когда переменная связана лексически, локальное значение определяется лексической средой; следовательно, переменные могут иметь локальные значения, даже если ячейки значений их символов не назначены.
- Функция: makunbound символ
-
Эта функция очищает ячейку значения символа, делая переменную пустой. Она возвращает символ.
Если символ имеет динамическую локальную привязку,
makunboundделает текущую привязку пустой, и эта пустота сохраняется только до тех пор, пока локальная привязка действует. После этого ранее затенённая локальная или глобальная привязка становится доступной; тогда переменная больше не будет пустой, если только раскрытая привязка не пустая тоже.Вот некоторые примеры (предполагая, что динамическая привязка активна):
(setq x 1) ; Put a value in the global binding. ⇒ 1 (let ((x 2)) ; Locally bind it. (makunbound 'x) ; Void the local binding. x) error→ Symbol's value as variable is void: x
x ; The global binding is unchanged. ⇒ 1 (let ((x 2)) ; Locally bind it. (let ((x 3)) ; And again. (makunbound 'x) ; Void the innermost-local binding. x)) ; And refer: it’s void. error→ Symbol's value as variable is void: x
(let ((x 2)) (let ((x 3)) (makunbound 'x)) ; Void inner binding, then remove it. x) ; Now outerletbinding is visible. ⇒ 2
- Функция: boundp переменная
-
Эта функция возвращает
t, если переменная (символ) не пустая, иnil, если она пустая.Вот некоторые примеры (предполагая, что динамическая привязка активна):
(boundp 'abracadabra) ; Starts out void. ⇒ nil(let ((abracadabra 5)) ; Locally bind it. (boundp 'abracadabra)) ⇒ t(boundp 'abracadabra) ; Still globally void. ⇒ nil(setq abracadabra 5) ; Make it globally nonvoid. ⇒ 5(boundp 'abracadabra) ⇒ t
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/Void-Variables.html