No Emacs Lisp, como faço para verificar se uma variável está definida?

90

No Emacs Lisp, como faço para verificar se uma variável está definida?

Mike
fonte

Respostas:

136

você pode querer boundp: retorna t se a variável (um símbolo) não for vazia; mais precisamente, se sua ligação atual não for nula. Caso contrário, retorna nulo.

  (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
fonte
13
às vezes também pode ser útil usar INTERN-SOFT para verificar se um símbolo existe.
Rainer Joswig,
44

Além da resposta do dfa, você também pode querer ver se ele está vinculado a uma função usando fboundp :

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

Se você quiser verificar o valor de uma variável de dentro do emacs (não sei se isso se aplica, já que você escreveu "no Emacs Lisp"?):

M-: começa Eval no mini buffer. Escreva o nome da variável e pressione Enter. O mini-buffer mostra o valor da variável.

Se a variável não for definida, você obterá um erro do depurador.

Gauthier
fonte
De forma equivalente, M-: (boundp 'the-variable-name) RETverificará sem a necessidade de acionar um erro.
Radon Rosborough
Tenho certeza de que a questão é sobre scripts elisp, não sobre a IU interativa do Emacs.
binki
0

Lembre-se de que as variáveis ​​com valor nil são consideradas definidas.

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

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