在Emacs Lisp中,如何检查是否定义了变量?
答案 0 :(得分:128)
你可能想要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
答案 1 :(得分:42)
除dfa's answer之外,您可能还想查看它是否使用fboundp绑定为函数:
(defun baz ()
)
=> baz
(boundp 'baz)
=> nil
(fboundp 'baz)
=> t
答案 2 :(得分:4)
如果你想检查emacs中的变量值(我不知道这是否适用,因为你写了“在Emacs Lisp中”?):
M-:
在迷你缓冲区中启动Eval
。写入变量名称并按回车键。迷你缓冲区显示变量的值。
如果未定义变量,则会出现调试器错误。
答案 3 :(得分:0)
请记住,将值nil的变量视为已定义。
(progn (setq filename3 nil) (boundp 'filename3)) ;; returns t
(progn (setq filename3 nil) (boundp 'filename5)) ;; returns nil