В Emacs Lisp как проверить, определена ли переменная? - PullRequest
86 голосов
/ 16 апреля 2009

Как в Emacs Lisp проверить, определена ли переменная?

Ответы [ 4 ]

128 голосов
/ 16 апреля 2009

вы можете захотеть boundp: возвращает t, если переменная (символ) не void; точнее, если его текущая привязка не является недействительной. В противном случае возвращается ноль.

  (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
42 голосов
/ 17 апреля 2009

В дополнение к ответу dfa вы также можете посмотреть, связано ли оно как функция, используя fboundp :

(defun baz ()
  )
=> baz
(boundp 'baz)
=> nil
(fboundp 'baz)
=> t
4 голосов
/ 29 июня 2010

Если вы хотите проверить значение переменной из Emacs (я не знаю, применимо ли это, поскольку вы написали "в Emacs Lisp"?):

M-: запускает Eval в мини-буфере. Введите имя переменной и нажмите return. Мини-буфер показывает значение переменной.

Если переменная не определена, вы получаете ошибку отладчика.

0 голосов
/ 07 июля 2018

Помните, что переменные, имеющие значение nil, считаются определенными.

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

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