In Emacs Lisp, come posso controllare se una variabile è definita?In Emacs Lisp, come posso controllare se una variabile è definita?
risposta
si può volere boundp: restituisce t se variable (a symbol) non è vuoto; più precisamente, se il suo attuale legame non è nullo. Ritorna nullo altrimenti.
(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
Oltre a dfa's answer si potrebbe anche voler vedere se è legato come una funzione utilizzando fboundp:
(defun baz()
)
=> baz
(boundp 'baz)
=> nil
(fboundp 'baz)
=> t
Se si desidera controllare un valore variabile da dentro emacs (non so se questo vale, dal momento che hai scritto "in Emacs Lisp"?):
M-:
avvia Eval
nel mini buffer. Scrivi il nome della variabile e premi Invio. Il mini-buffer mostra il valore della variabile.
Se la variabile non è definita, si ottiene un errore di debugger.
Equivalentemente, 'M-: (boundp 'the-variable-name) RET' controllerà senza che sia necessario attivare un errore. –
Sono abbastanza sicuro che la domanda riguarda gli script elisp, non l'interfaccia utente interattiva di Emacs. – binki
a volte potrebbe anche essere utile usare INTERN-SOFT per verificare se esiste un simbolo. –