Quiero obtener el efecto de una variable estática usando defun
dentro de un let
enlace léxico para crear un cierre. Sin embargo, al compilar byte el archivo, recibo una advertencia. ¿Estoy haciendo algo mal, o si no, hay alguna forma de suprimir esta advertencia?
He creado 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))
El código funciona como se esperaba: la función increase-count
imprime "Count is: n" donde n aumenta cada vez que se llama. Sin embargo, al compilar byte este archivo, aparece la siguiente advertencia:
In end of data:
mcve.el:11:1:Warning: the function ‘increase-count’ is not known to be
defined.
Me parece que increase-count
siempre debe definirse antes de que se llame al final del let-block. ¿No es este el caso?
defun
no hace lo que crees que hace, siempre crea una definición de nivel superior. Elisp es después de todo no Esquema ...