Я хочу получить эффект статической переменной, используя defun
внутри let
с лексической привязкой для создания замыкания. Однако при байтовой компиляции файла я получаю предупреждение. Я делаю что-то не так, или если нет, есть ли способ подавить это предупреждение?
Я создал 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))
Код работает должным образом: функция increase-count
выводит «Count is: n», где n увеличивается при каждом вызове. Однако при байтовой компиляции этого файла я получаю следующее предупреждение:
In end of data:
mcve.el:11:1:Warning: the function ‘increase-count’ is not known to be
defined.
Мне кажется, что increase-count
всегда следует определять перед вызовом в конце блока let. Разве это не так?
defun
не делает то, что, как вы думаете, он делает, он всегда создает определение верхнего уровня. Элисп, в конце концов, не Схема ...