103

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

4

4 回答 4

148

你可能想要 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
于 2009-04-16T19:06:05.410 回答
49

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

(defun baz ()
  )
=> baz
(boundp 'baz)
=> nil
(fboundp 'baz)
=> t
于 2009-04-17T15:43:10.693 回答
4

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

M-:Eval迷你缓冲区开始。写下变量的名称并按回车键。迷你缓冲区显示变量的值。

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

于 2010-06-29T12:01:09.280 回答
3

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

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

(progn (setq filename3 nil) (boundp 'filename5)) ;; returns nil
于 2018-07-07T05:28:37.357 回答