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

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

26421 次浏览

you may want boundp: returns t if variable (a symbol) is not void; more precisely, if its current binding is not void. It returns nil otherwise.

  (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

In addition to dfa's answer you may also want to see if it's bound as a function using fboundp:

(defun baz ()
)
=> baz
(boundp 'baz)
=> nil
(fboundp 'baz)
=> t

If you want to check a variable value from within emacs (I don't know if this applies, since you wrote "in Emacs Lisp"?):

M-: starts Eval in the mini buffer. Write in the name of the variable and press return. The mini-buffer shows the value of the variable.

If the variable is not defined, you get a debugger error.

Remember that variables having the value nil is regarded as being defined.

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


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