Trong Emacs Lisp, làm cách nào để kiểm tra xem một biến đã được xác định chưa?
Câu trả lời:
bạn có thể muốn bindp: trả về t nếu biến (một ký hiệu) không vô hiệu; chính xác hơn, nếu ràng buộc hiện tại của nó không vô hiệu. Ngược lại, nó trả về 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
Ngoài câu trả lời DFA của bạn cũng có thể muốn xem nếu đó là ràng buộc như một chức năng sử dụng fboundp :
(defun baz ()
)
=> baz
(boundp 'baz)
=> nil
(fboundp 'baz)
=> t
Nếu bạn muốn kiểm tra một giá trị biến từ bên trong emacs (tôi không biết điều này có áp dụng không, vì bạn đã viết "trong Emacs Lisp"?):
M-:
bắt đầu Eval
trong bộ đệm nhỏ. Viết tên của biến và nhấn return. Bộ đệm nhỏ hiển thị giá trị của biến.
Nếu biến không được xác định, bạn sẽ gặp lỗi trình gỡ lỗi.
M-: (boundp 'the-variable-name) RET
sẽ kiểm tra mà không cần kích hoạt lỗi.
Hãy nhớ rằng các biến có giá trị nil được coi là đã được xác định.
(progn (setq filename3 nil) (boundp 'filename3)) ;; returns t
(progn (setq filename3 nil) (boundp 'filename5)) ;; returns nil