Di Emacs Lisp, bagaimana cara memeriksa apakah suatu variabel sudah ditentukan?
93
Anda mungkin ingin terikatp: mengembalikan t jika variabel (simbol) tidak kosong; lebih tepatnya, jika pengikatan arusnya tidak batal. Ia mengembalikan nol jika tidak.
(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
symbol-value
fungsi untuk mencetak nilai sebenarnya. simbol-nilai-doc . Misalnya: Menggunakaneval-expression
perintah dan kemudian mengetik ini:(symbol-value 'abracadabra)
Selain jawaban dfa, Anda mungkin juga ingin melihat apakah itu terikat sebagai fungsi menggunakan fboundp :
(defun baz () ) => baz (boundp 'baz) => nil (fboundp 'baz) => t
sumber
Jika Anda ingin memeriksa nilai variabel dari dalam emacs (saya tidak tahu apakah ini berlaku, karena Anda menulis "di Emacs Lisp"?):
M-:
dimulaiEval
di buffer mini. Tuliskan nama variabel dan tekan kembali. Buffer mini menunjukkan nilai variabel.Jika variabel tidak ditentukan, Anda mendapatkan kesalahan debugger.
sumber
M-: (boundp 'the-variable-name) RET
halnya , akan memeriksa tanpa perlu memicu kesalahan.Ingatlah bahwa variabel yang memiliki nilai nihil dianggap telah didefinisikan.
(progn (setq filename3 nil) (boundp 'filename3)) ;; returns t (progn (setq filename3 nil) (boundp 'filename5)) ;; returns nil
sumber