webdevqa.jp.net

Emacs LISPでは、変数が定義されているかどうかを確認するにはどうすればよいですか?

Emacs LISPでは、変数が定義されているかどうかを確認するにはどうすればよいですか?

89
mike

boundp:が必要な場合があります。変数(シンボル)がvoidでない場合、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
133
dfa

dfaの答え に加えて、 fboundp を使用して関数としてバインドされているかどうかを確認することもできます。

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

Emacs内から変数値を確認したい場合(「Emacs LISPで」と書いたので、これが当てはまるかどうかわかりませんか?):

M-:は、ミニバッファでEvalを開始します。変数の名前を書き、リターンを押します。ミニバッファには変数の値が表示されます。

変数が定義されていない場合、デバッガーエラーが発生します。

4
Gauthier

値がnilの変数は定義済みと見なされることに注意してください。

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

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