En Emacs Lisp, ¿cómo verifico si una variable está definida?

Respuestas:

138

puede querer boundp: devuelve t si la variable (un símbolo) no es nula; más precisamente, si su vinculación actual no es nula. Devuelve nil de lo contrario.

  (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
fuente
14
a veces también puede resultar útil utilizar INTERN-SOFT para comprobar si existe un símbolo.
Rainer Joswig
45

Además de la respuesta de dfa, es posible que también desee ver si está vinculado como una función usando fboundp :

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

Si desea verificar el valor de una variable desde emacs (no sé si esto se aplica, ya que escribió "en Emacs Lisp"?):

M-:comienza Evalen el mini búfer. Escriba el nombre de la variable y presione retorno. El mini búfer muestra el valor de la variable.

Si la variable no está definida, obtiene un error de depuración.

Gauthier
fuente
De forma equivalente, M-: (boundp 'the-variable-name) RETcomprobará sin necesidad de generar un error.
Radon Rosborough
Estoy bastante seguro de que la pregunta es sobre scripts elisp, no sobre la interfaz de usuario interactiva de Emacs.
binki
0

Recuerde que las variables que tienen el valor nil se consideran definidas.

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

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