byte-compilation – Manejo de "Advertencia: asignación a variable libre" cuando ciertas bibliotecas pueden faltar por diseño

Pregunta:

Compilación de bytes de mi modo:

(defun dict-setup-expansions ()
  "Add `dict-mode' specific expansions."
  (set (make-local-variable 'er/try-expand-list) (list #'dict-mark-article)))

da advertencia:

Warning: assignment to free variable `er/try-expand-list'

Esta es una situación normal porque er/try-expand-list está definido en la expand-region biblioteca externa.

Mi modo registra la extensión para expand-region biblioteca de la expand-region , pero está bien ejecutar mi modo sin el modo de expand-region .

Creo que la forma correcta de lidiar con la advertencia es agregar una declaración:

(defvar er/try-expand-list)

defvar docs dicen:

The `defvar' form also declares the variable as "special",
so that it is always dynamically bound even if `lexical-binding' is t.

Yo uso -*- lexical-binding: t -*- . ¿ defvar significa que sin la variable defvar er/try-expand-list estaría en el alcance léxico y tengo un error real?

Respuesta:

No, set y setq no declaran variables léxicas. Solo let lo let hace. Si hubiera usado let aquí, tendría un error, pero está bien. La advertencia existe principalmente para detectar errores tipográficos cuando se utilizan variables dinámicas.

Para hacer que la advertencia desaparezca, use defvar como en su pregunta, pero no cite el símbolo.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım