In Emacs Lisp, come posso verificare se una variabile è definita?
Risposte:
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
Oltre alla risposta di dfa, potresti anche voler vedere se è associato come funzione utilizzando fboundp :
(defun baz ()
)
=> baz
(boundp 'baz)
=> nil
(fboundp 'baz)
=> t
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 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, viene visualizzato un errore del debugger.
M-: (boundp 'the-variable-name) RET
controllerà senza la necessità di innescare un errore.
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