【发布时间】:2010-10-19 22:39:44
【问题描述】:
在 Emacs Lisp 中,如何检查变量是否已定义?
【问题讨论】:
在 Emacs Lisp 中,如何检查变量是否已定义?
【问题讨论】:
除了dfa's answer,您可能还想查看它是否使用fboundp 绑定为函数:
(defun baz ()
)
=> baz
(boundp 'baz)
=> nil
(fboundp 'baz)
=> t
【讨论】:
请记住,值为 nil 的变量被视为已定义。
(progn (setq filename3 nil) (boundp 'filename3)) ;; returns t
(progn (setq filename3 nil) (boundp 'filename5)) ;; returns nil
【讨论】:
如果你想在 emacs 中检查变量值(我不知道这是否适用,因为你写的是“在 Emacs Lisp 中”?):
M-: 在迷你缓冲区中启动 Eval。写下变量的名称并按回车键。迷你缓冲区显示变量的值。
如果未定义变量,则会出现调试器错误。
【讨论】:
M-: (boundp 'the-variable-name) RET 将在不需要触发错误的情况下进行检查。
你可能想要 boundp: 如果变量(一个符号)不是 void,则返回 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 函数来打印实际值。 symbol-value-doc。例如:使用eval-expression 命令,然后输入:(symbol-value 'abracadabra)
let 块为我返回 nil。这适用于词法绑定吗?