Ich möchte den Effekt einer statischen Variablen erhalten, indem ich defun
inside of let
mit lexikalischer Bindung verwende, um einen Abschluss zu erstellen. Beim Byte-Kompilieren der Datei erhalte ich jedoch eine Warnung. Mache ich etwas falsch oder gibt es eine Möglichkeit, diese Warnung zu unterdrücken?
Ich habe ein MCVE erstellt:
;; -*- 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))
Der Code funktioniert wie erwartet: Die Funktion gibt increase-count
"Count is: n" aus, wobei sich n bei jedem Aufruf erhöht. Beim Kompilieren dieser Datei mit Bytes erhalte ich jedoch die folgende Warnung:
In end of data:
mcve.el:11:1:Warning: the function ‘increase-count’ is not known to be
defined.
Es scheint mir, dass increase-count
immer definiert werden sollte, bevor es am Ende des Let-Blocks aufgerufen wird. Ist das nicht der Fall?
defun
Tut nicht das, was Sie denken, sondern erstellt immer eine Definition auf oberster Ebene. Elisp ist immerhin nicht Schema ...