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

时间:2009-04-16 18:58:21

标签: emacs lisp elisp

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

4 个答案:

答案 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