Tôi muốn có được hiệu ứng của một biến tĩnh bằng cách sử dụng defunbên trong letvới ràng buộc từ vựng để tạo ra một bao đóng. Tuy nhiên, khi biên dịch byte tệp, tôi nhận được cảnh báo. Tôi đang làm gì đó sai, hoặc nếu không, có cách nào để ngăn chặn cảnh báo này?
Tôi đã tạo một MCVE:
;; -*- lexical-binding: t -*-
(let ((count 0))
(defun increase-count ()
(interactive)
(setq count (1+ count))
(message "Count is: %d" count))
;; The warning happens here.
(increase-count))
Mã này hoạt động như mong đợi: hàm increase-countin ra "Đếm là: n" trong đó n tăng mỗi lần nó được gọi. Tuy nhiên, khi biên dịch byte tệp này, tôi nhận được cảnh báo sau:
In end of data:
mcve.el:11:1:Warning: the function ‘increase-count’ is not known to be
defined.
Đối với tôi, nó increase-countluôn luôn phải được xác định trước khi nó được gọi ở cuối khối let. đây không phải là trường hợp?
defunkhông làm những gì bạn nghĩ nó làm, nó luôn tạo ra một định nghĩa cấp cao nhất. Elisp sau tất cả không phải là Đề án ...