In Emacs Lisp, come posso verificare se una variabile è definita?


92

In Emacs Lisp, come posso verificare se una variabile è definita?

Risposte:


138

potresti volere boundp: restituisce t se la variabile (un simbolo) non è void; più precisamente, se il suo attuale legame non è nullo. In caso contrario, restituisce zero.

  (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

14
a volte potrebbe anche essere utile utilizzare INTERN-SOFT per verificare se esiste un simbolo.
Rainer Joswig


4

Se vuoi controllare il valore di una variabile all'interno di emacs (non so se si applica, dato che hai scritto "in Emacs Lisp"?):

M-:inizia Evalnel mini buffer. Scrivi il nome della variabile e premi Invio. Il mini-buffer mostra il valore della variabile.

Se la variabile non è definita, viene visualizzato un errore del debugger.


Allo stesso modo, M-: (boundp 'the-variable-name) RETcontrollerà senza la necessità di innescare un errore.
Radon Rosborough

Sono abbastanza sicuro che la domanda riguardi gli script elisp, non l'interfaccia utente interattiva di Emacs.
binki

0

Ricorda che le variabili con valore nil sono considerate definite.

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

(progn (setq filename3 nil) (boundp 'filename5)) ;; returns nil
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.