110 votes

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

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

155voto

dfa Points 54490

Vous pouvez vouloir boundp : retourne t si la variable (un symbole) n'est pas void ; plus précisément, si sa liaison actuelle n'est pas void. Sinon, elle renvoie nil.

  (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 votes

Parfois, il peut également être utile d'utiliser INTERN-SOFT pour vérifier si un symbole existe.

0 votes

J'utilise aussi parfois symbol-value pour imprimer la valeur réelle. Symbole-valeur-doc . Egs : Utilisation de la eval-expression et ensuite taper ceci : (symbol-value 'abracadabra)

0 votes

El let retours en bloc nil pour moi. Cela fonctionne-t-il avec les liaisons lexicales ?

53voto

Jacob Gabrielson Points 8800

En plus de Réponse de dfa vous pouvez aussi voir si elle est liée à une fonction en utilisant fboundp :

(defun baz ()
  )
=> baz
(boundp 'baz)
=> nil
(fboundp 'baz)
=> t

4voto

Gauthier Points 6684

Si vous voulez vérifier la valeur d'une variable à partir d'Emacs (je ne sais pas si cela s'applique, puisque vous avez écrit "dans Emacs Lisp" ?)

M-: commence Eval dans le mini-tampon. Écrivez le nom de la variable et appuyez sur la touche retour. Le mini-buffer affiche la valeur de la variable.

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

0 votes

De manière équivalente, M-: (boundp 'the-variable-name) RET se vérifiera sans qu'il soit nécessaire de déclencher une erreur.

2 votes

Je suis presque sûr que la question concerne les scripts elisp, pas l'interface interactive d'Emacs.

3voto

cjohansson Points 591

Rappelez-vous que les variables ayant la valeur nil sont considérées comme étant définies.

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X