在 Emacs Lisp 中,如何检查变量是否已定义?

问题描述 投票:0回答:4

在 Emacs Lisp 中,如何检查变量是否已定义?

emacs lisp elisp
4个回答
155
投票

您可能需要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
    

53
投票
除了

dfa的答案之外,您可能还想看看它是否使用fboundp作为函数绑定:

(defun baz () ) => baz (boundp 'baz) => nil (fboundp 'baz) => t
    

4
投票
如果你想从 emacs 中检查变量值(我不知道这是否适用,因为你写了“in Emacs Lisp”?):

M-:

 在迷你缓冲区中启动 
Eval
。输入变量的名称并按回车键。迷你缓冲区显示变量的值。

如果未定义变量,则会出现调试器错误。


3
投票
请记住,值为 nil 的变量被视为已定义。

(progn (setq filename3 nil) (boundp 'filename3)) ;; returns t (progn (setq filename3 nil) (boundp 'filename5)) ;; returns nil
    
© www.soinside.com 2019 - 2024. All rights reserved.