12.16 Переменные с ограниченными значениями

Обычные переменные Lisp могут быть присвоены любое значение, являющееся допустимым объектом Lisp. Однако некоторые переменные Lisp не определены в Lisp, а в C. Большинство этих переменных определены в коде C с использованием DEFVAR_LISP. Как и переменные, определенные в Lisp, они могут принимать любое значение. Однако некоторые переменные определены с использованием DEFVAR_INT или DEFVAR_BOOL. См. Написание примитивов Emacs, в частности описание функций типа syms_of_filename, для краткого обсуждения реализации в C.

Переменные типа DEFVAR_BOOL могут принимать только значения nil или t. Попытка присвоить им любое другое значение установит их в t:

(let ((display-hourglass 5))
  display-hourglass)
     ⇒ t
Переменная: byte-boolean-vars

Эта переменная содержит список всех переменных типа DEFVAR_BOOL.

Переменные типа DEFVAR_INT могут принимать только целочисленные значения. Попытка присвоить им любое другое значение приведет к ошибке:

(setq undo-limit 1000.0)
error→ Неверный аргумент типа: integerp, 1000.0