Wie überprüfe ich in Emacs Lisp, ob eine Variable definiert ist?

90

Wie überprüfe ich in Emacs Lisp, ob eine Variable definiert ist?

Mike
quelle

Antworten:

136

Möglicherweise möchten Sie boundp: Gibt t zurück, wenn die Variable (ein Symbol) nicht ungültig ist. genauer gesagt, wenn seine derzeitige Bindung nicht ungültig ist. Andernfalls wird null zurückgegeben.

  (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
dfa
quelle
13
Manchmal kann es auch nützlich sein, INTERN-SOFT zu verwenden, um zu überprüfen, ob ein Symbol vorhanden ist.
Rainer Joswig
44

Zusätzlich zur Antwort von dfa möchten Sie möglicherweise auch sehen, ob es mit fboundp als Funktion gebunden ist :

(defun baz ()
  )
=> baz
(boundp 'baz)
=> nil
(fboundp 'baz)
=> t
Jacob Gabrielson
quelle
4

Wenn Sie einen Variablenwert aus emacs heraus überprüfen möchten (ich weiß nicht, ob dies zutrifft, da Sie "in Emacs Lisp" geschrieben haben?):

M-:startet Evalim Minipuffer. Schreiben Sie den Namen der Variablen und drücken Sie die Eingabetaste. Der Minipuffer zeigt den Wert der Variablen an.

Wenn die Variable nicht definiert ist, wird ein Debuggerfehler angezeigt.

Gauthier
quelle
Gleichermaßen M-: (boundp 'the-variable-name) RETwird geprüft, ohne dass ein Fehler ausgelöst werden muss.
Radon Rosborough
Ich bin mir ziemlich sicher, dass es bei der Frage um Elisp-Skripte geht, nicht um die interaktive Benutzeroberfläche von Emacs.
Binki
0

Denken Sie daran, dass Variablen mit dem Wert nil als definiert angesehen werden.

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

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