Як в Emacs Lisp перевірити, чи визначена змінна?


Відповіді:


137

Вам може знадобитися boundp: повертає t, якщо змінна (символ) не порожня; точніше, якщо його поточна прив'язка не є недійсною. Інакше це повертає нуль.

  (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

13
іноді також може бути корисним використовувати INTERN-SOFT, щоб перевірити, чи існує символ.
Райнер Йосвіг

44

На додаток до відповіді dfa, ви також можете побачити, чи пов'язано це як функція за допомогою fboundp :

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

4

Якщо ви хочете перевірити значення змінної всередині emacs (я не знаю, чи це стосується, оскільки ви написали "у Emacs Lisp"?):

M-:починається Evalв міні-буфері. Напишіть в назві змінної та натисніть return. Міні-буфер показує значення змінної.

Якщо змінна не визначена, ви отримуєте помилку налагоджувача.


Еквівалентно, M-: (boundp 'the-variable-name) RETперевірятиме без необхідності викликати помилку.
Радон Росборо

Я майже впевнений, що питання стосується сценаріїв elisp, а не інтерактивного інтерфейсу користувача Emacs.
binki

0

Пам'ятайте, що змінні, що мають значення nil, розглядаються як визначені.

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

(progn (setq filename3 nil) (boundp 'filename5)) ;; returns nil
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.