W Emacs Lisp, jak sprawdzić, czy zmienna jest zdefiniowana?

93

W Emacs Lisp, jak sprawdzić, czy zmienna jest zdefiniowana?

mikrofon
źródło

Odpowiedzi:

139

możesz chcieć boundp: zwraca t, jeśli zmienna (symbol) nie jest pusta; a dokładniej, jeśli jego obecne zobowiązanie nie jest nieważne. W przeciwnym razie zwraca 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
dfa
źródło
14
czasami może być również przydatne użycie INTERN-SOFT do sprawdzenia, czy symbol istnieje.
Rainer Joswig
Czasami używam również symbol-valuefunkcji, aby wydrukować rzeczywistą wartość. dokument-wartość-symbolu . Np .: Użycie eval-expressionpolecenia, a następnie wpisanie tego: (symbol-value 'abracadabra)
Dhawan Gayash
45

Oprócz odpowiedzi dfa możesz również chcieć sprawdzić, czy jest on powiązany jako funkcja za pomocą fboundp :

(defun baz ()
  )
=> baz
(boundp 'baz)
=> nil
(fboundp 'baz)
=> t
Jacob Gabrielson
źródło
4

Jeśli chcesz sprawdzić wartość zmiennej z poziomu emacsa (nie wiem, czy to dotyczy, skoro napisałeś „w Emacs Lisp”?):

M-:uruchamia się Evalw mini buforze. Wpisz nazwę zmiennej i naciśnij klawisz Return. Minibufor pokazuje wartość zmiennej.

Jeśli zmienna nie jest zdefiniowana, pojawia się błąd debugera.

Gauthier
źródło
Równoważnie M-: (boundp 'the-variable-name) RETsprawdzi bez konieczności wywoływania błędu.
Radon Rosborough
Jestem prawie pewien, że pytanie dotyczy skryptów elisp, a nie interaktywnego interfejsu użytkownika Emacsa.
binki,
0

Pamiętaj, że zmienne o wartości nil są traktowane jako zdefiniowane.

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

(progn (setq filename3 nil) (boundp 'filename5)) ;; returns nil
cjohansson
źródło