Eu quero obter o efeito de uma variável estática usando defun
dentro de let
com ligação lexical para criar um fechamento. No entanto, ao compilar o arquivo com bytes, recebo um aviso. Estou fazendo algo errado, ou se não, existe uma maneira de suprimir esse aviso?
Eu criei um 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))
O código funciona como esperado: a função increase-count
exibe "Count is: n", em que n aumenta sempre que é chamado. No entanto, ao compilar este arquivo por byte, recebo o seguinte aviso:
In end of data:
mcve.el:11:1:Warning: the function ‘increase-count’ is not known to be
defined.
Parece-me que increase-count
sempre deve ser definido antes de ser chamado no final do bloco let. Não é este o caso?
defun
não faz o que você pensa que faz, sempre cria uma definição de nível superior.