Je veux obtenir l'effet d'une variable statique en utilisant defun
inside of let
avec une liaison lexicale pour créer une fermeture. Cependant, lors de la compilation d'octets du fichier, je reçois un avertissement. Suis-je en train de faire quelque chose de mal, ou sinon, existe-t-il un moyen de supprimer cet avertissement?
J'ai créé 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))
Le code fonctionne comme prévu: la fonction increase-count
affiche "Count is: n" où n augmente à chaque appel. Cependant, lors de la compilation d'octets de ce fichier, j'obtiens l'avertissement suivant:
In end of data:
mcve.el:11:1:Warning: the function ‘increase-count’ is not known to be
defined.
Il me semble que cela increase-count
devrait toujours être défini avant d'être appelé à la fin du let-block. Ce n'est pas le cas?
defun
ne fait pas ce que vous pensez qu'il fait, il crée toujours une définition de haut niveau. Elisp n'est après tout pas Scheme ...