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?

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

13
Manchmal kann es auch nützlich sein, INTERN-SOFT zu verwenden, um zu überprüfen, ob ein Symbol vorhanden ist.
Rainer Joswig


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.