Spec-Zone.ru › Elisp

Когда переменная пустая

Мы говорим, что переменная пустая, если у её символа есть ячейка значения, не имеющая присвоенного значения (см. Компоненты символов).

В соответствии с правилом динамического области действия по умолчанию 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 outer let binding 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

Spec-Zone.ru

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