error-handling clojure compiler-errors macros

error handling - ¿Cuál es la forma convencional de indicar un error dentro de defmacro?



error-handling clojure (1)

¿Cuál es la forma convencional y de buen comportamiento para que una macro indique que se han pasado argumentos no válidos?

(defmacro defthisthing [name & definitions] . . .)

Estoy escribiendo una macro en este momento para aceptar un montón de definiciones. Si lo mismo se define dos veces, la macro debería quejarse. De forma similar, si una de las definiciones usa un término que no está definido en otra parte de la misma macro invocación, la macro debería quejarse, con suerte con números de línea y columna para que el programador pueda ver exactamente dónde está el error.

Actualmente estoy pensando que lanzar una excepción tiene más sentido, porque los macro argumentos no válidos son, de hecho, un error de compilación. Todo debería cerrarse de manera diferente que si el compilador encontrara paréntesis desequilibrados.

Si eso es correcto, ¿cuál es la excepción convencional para lanzar? ¿Y cómo se incluye el nombre de archivo y el número de línea del fragmento ofensivo de código?

Y si eso no es correcto, ¿cuál es el enfoque más Clojurely?


Lanzar excepciones suena bien. Acabo de comprobar la fuente Clojure y así es como se hace allí:

(defmacro let ...) calls (defmacro assert-args ...) , que arroja excepciones si los argumentos no cumplen con sus requisitos.