В Emacs Lisp, как я могу проверить, если переменная определена?


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

4 80

4 ответа:

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

  (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 возможно, вы также хотите, чтобы увидеть, если он привязан в качестве функции, используя fboundp:

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

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

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

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

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

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

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