Tôi muốn có được hiệu ứng của một biến tĩnh bằng cách sử dụng defun
bên trong let
vớ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-count
in 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-count
luô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?
defun
khô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 ...