Dans Emacs Lisp, comment vérifier si une variable est définie?

91

Dans Emacs Lisp, comment vérifier si une variable est définie?

Mike
la source

Réponses:

137

vous pouvez vouloir boundp: renvoie t si la variable (un symbole) n'est pas vide; plus précisément, si sa liaison actuelle n'est pas nulle. Sinon, il renvoie nul.

  (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
la source
13
parfois, il peut également être utile d'utiliser INTERN-SOFT pour vérifier si un symbole existe.
Rainer Joswig
44

En plus de la réponse de dfa, vous voudrez peut-être également voir si elle est liée en tant que fonction en utilisant fboundp :

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

Si vous voulez vérifier une valeur de variable depuis emacs (je ne sais pas si cela s'applique, puisque vous avez écrit "in Emacs Lisp"?):

M-:démarre Evaldans le mini tampon. Écrivez le nom de la variable et appuyez sur retour. Le mini-tampon affiche la valeur de la variable.

Si la variable n'est pas définie, vous obtenez une erreur de débogage.

Gauthier
la source
De manière équivalente, M-: (boundp 'the-variable-name) RETvérifiera sans qu'il soit nécessaire de déclencher une erreur.
Radon Rosborough
Je suis sûr que la question concerne les scripts elisp, pas l'interface utilisateur interactive d'Emacs.
binki
0

N'oubliez pas que les variables ayant la valeur nil sont considérées comme définies.

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

(progn (setq filename3 nil) (boundp 'filename5)) ;; returns nil
cjohansson
la source