Trong Emacs Lisp, làm cách nào để kiểm tra xem một biến đã được xác định chưa?


92

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:


138

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

13
đôi khi cũng có thể hữu ích khi sử dụng INTERN-SOFT để kiểm tra xem biểu tượng có tồn tại hay không.
Rainer Joswig


4

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 Evaltrong 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.


Tương tự, M-: (boundp 'the-variable-name) RETsẽ kiểm tra mà không cần kích hoạt lỗi.
Radon Rosborough

Tôi khá chắc rằng câu hỏi là về tập lệnh elisp, không phải về giao diện người dùng tương tác của Emacs.
binki

0

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.