在Emacs Lisp中,我该怎么检查一个变量是否被定义?
您可能需要使用boundp函数:如果变量(一个符号)不是void,则返回t;更准确地说,如果它的当前绑定不是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
M-:
在迷你缓冲区中启动Eval
。输入变量名称并按回车键。迷你缓冲区会显示变量的值。M-: (boundp 'the-variable-name) RET
将会检查变量是否存在而无需触发错误。 - Radon Rosborough请记住,变量的值为nil被视为已经定义。
(progn (setq filename3 nil) (boundp 'filename3)) ;; returns t
(progn (setq filename3 nil) (boundp 'filename5)) ;; returns nil
symbol-value
函数来打印实际值。symbol-value-doc。例如:使用eval-expression
命令,然后输入以下内容:(symbol-value 'abracadabra)
。 - Dhawan Gayashlet
块对我返回了nil
。这是否与词法绑定有关? - HappyFace