Я хочу отримати ефект статичної змінної, використовуючи 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
слід завжди визначатись до того, як вона буде викликана в кінці пускового блоку. Це не так?
defun
не робить те, що ви думаєте, що робить, воно завжди створює визначення верхнього рівня. Зрештою, Елісп - це не схема ...