В Emacs Lisp, как проверить, определена ли переменная?
В Emacs Lisp, как проверить, определена ли переменная?
Ответ 1
вам может понадобиться boundp: возвращает t, если переменная (символ) не является void; точнее, если его текущее связывание не пусто. Он возвращает нуль в противном случае.
(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
Ответ 2
В дополнение к ответу dfa вы также можете посмотреть, является ли он связанным как функция с использованием fboundp:
(defun baz ()
)
=> baz
(boundp 'baz)
=> nil
(fboundp 'baz)
=> t
Ответ 3
Если вы хотите проверить значение переменной из emacs (я не знаю, применимо ли это, поскольку вы написали "в Emacs Lisp"?):
M-:
запускает Eval
в мини-буфере. Напишите имя переменной и нажмите return. Мини-буфер показывает значение переменной.
Если переменная не определена, вы получаете ошибку отладчика.
Ответ 4
Помните, что переменные, имеющие значение nil, считаются определенными.
(progn (setq filename3 nil) (boundp 'filename3)) ;; returns t
(progn (setq filename3 nil) (boundp 'filename5)) ;; returns nil