Как в Emacs Lisp проверить, определена ли переменная?
93
вам может понадобиться 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
symbol-value
функцию для вывода фактического значения. символ-значение-док . Например: Использованиеeval-expression
команды и последующий ввод:(symbol-value 'abracadabra)
В дополнение к ответу dfa вы также можете узнать, привязан ли он как функция с помощью fboundp :
(defun baz () ) => baz (boundp 'baz) => nil (fboundp 'baz) => t
источник
Если вы хотите проверить значение переменной из emacs (я не знаю, применимо ли это, поскольку вы написали «в Emacs Lisp»?):
M-:
начинаетсяEval
в мини-буфере. Введите имя переменной и нажмите return. Мини-буфер показывает значение переменной.Если переменная не определена, вы получите ошибку отладчика.
источник
M-: (boundp 'the-variable-name) RET
будет проверять, не вызывая ошибки.Помните, что переменные, имеющие значение nil, считаются определяемыми.
(progn (setq filename3 nil) (boundp 'filename3)) ;; returns t (progn (setq filename3 nil) (boundp 'filename5)) ;; returns nil
источник