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


Answers:


137

您可能需要boundp:如果变量(符号)不为空,则返回t;否则为false。更准确地说,如果其当前绑定不无效。否则返回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

13
有时使用INTERN-SOFT检查符号是否存在也可能很有用。
Rainer Joswig


4

如果要从emacs中检查变量值(我不知道这是否适用,因为您写的是“ in Emacs Lisp”?):

M-:Eval迷你缓冲区开始。输入变量名称,然后按回车键。迷你缓冲区显示变量的值。

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


同样,M-: (boundp 'the-variable-name) RET将检查而不需要触发错误。
Radon Rosborough

我很确定问题在于elisp脚本,而不是Emacs的交互式UI。
binki

0

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

(progn (setq filename3 nil) (boundp 'filename3)) ;; returns t

(progn (setq filename3 nil) (boundp 'filename5)) ;; returns nil
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.