Voglio ottenere l'effetto di una variabile statica usando defun
inside of let
con associazione lessicale per creare una chiusura. Tuttavia, durante la compilazione di byte del file, viene visualizzato un avviso. Sto facendo qualcosa di sbagliato o, in caso contrario, c'è un modo per sopprimere questo avviso?
Ho creato un 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))
Il codice funziona come previsto: la funzione increase-count
stampa "Count is: n" dove n aumenta ogni volta che viene chiamato. Tuttavia, durante la compilazione di byte di questo file, ricevo il seguente avviso:
In end of data:
mcve.el:11:1:Warning: the function ‘increase-count’ is not known to be
defined.
Mi sembra che increase-count
debba sempre essere definito prima che venga chiamato alla fine del let-block. Non è così?
defun
non fa quello che pensi che faccia, crea sempre una definizione di alto livello. Dopotutto Elisp non è Scheme ...