¿Cómo evito las advertencias del compilador de bytes Unused lexical variable
en las funciones definidas mediante macros expandibles defun
?
Por ejemplo, macro defun-rcirc-command
in
rcirc.el
usa la target
variable que no es utilizada por varias invocaciones.
En Common Lisp puedo usar el
ignorable
declaración: (declare (ignorable target))
.
Malas soluciones:
Agregue algo similar
(setq target target)
a todos los usuariosdefun-rcirc-command
que no utilizantarget
: eso requiere modificar muchas invocaciones de macro.Prefijar la variable ignorable con un guión bajo -
_target
- no ayuda porque_
significaignore
, noignorable
, es decir, cuando se usa, obtengovariable '_target' not left unused
.
compilation
warning
sds
fuente
fuente
(ignore VAR)
argumento para cada argumento defun antes de la expansión, @ body que probablemente silenciará los errores.Respuestas:
La forma en que lo he hecho hasta ahora es agregar una llamada de la forma
Esta llamada de función se optimizará, pero antes de eso, el compilador lo contará como un uso, por lo que no se activará la advertencia "no utilizada".
fuente
Al observar el código, parece que el objetivo no está destinado a ser una variable global, sino que se pasa a la función creada cuando se llama. Si ese es el caso, es mejor crearlo como un símbolo local para la macro. Un ejemplo simple de una macro que crea una función que acepta un argumento y le agrega 10:
Vocación
resultará en una función llamada hamster que acepta un argumento.
Entonces puedes llamar
y volverá
15
.El truco es crear un nuevo símbolo que actuará como argumento para la nueva función.
EDITAR:
Siempre he visto que si te estás refiriendo al símbolo generado en la expresión del cuerpo pasado, incluyes el nombre en la llamada como:
Que luego convierte las llamadas en:
dónde
que vuelve
30
yvuelve
40
.Es cierto que esto siempre me molesta cuando escribo macros de esta manera hasta que miro el uso en el que parece que se declara un parámetro y luego se usa.
fuente
target
. IOW, su excelente sugerencia no es aplicable en este caso específico.