Tengo un grupo de funciones numéricas en Clojure para las que quiero validar los argumentos. Existen numerosos tipos de argumentos esperados por las funciones, como números enteros positivos, porcentajes, secuencias de números, secuencias de números distintos de cero, etc. Puedo validar los argumentos a cualquier función individual por:¿Debo usar una función o una macro para validar argumentos en Clojure?
- Escribiendo código de validación directamente en la función.
- Escribiendo una función de propósito general , pasándole los argumentos y tipos esperados.
- Escribiendo una macro de propósito general, pasando los argumentos y tipos esperados.
- Otros en los que no he pensado.
Algunos Lisp code de Larry Hunter es un buen ejemplo de # 3. (Busque la macro test-variables
)
Mi intuición es que una macro es más apropiada debido al control sobre la evaluación y la posibilidad de realizar cálculos en tiempo de compilación en lugar de hacerlo todo en tiempo de ejecución. Pero no he encontrado un caso de uso para el código que estoy escribiendo que parece requerirlo. Me pregunto si vale la pena el esfuerzo escribir tal macro.
¿Alguna sugerencia?
Agradable; No sabía que – pmf
Gracias por otra gran respuesta. Esto hace exactamente lo que yo quería hacer. También ilustra uno de los motivos por los que una macro es una mejor solución. Pensando en cómo desambiguar el argumento del problema si una función requiere dos o más con las mismas características, digamos dos enteros positivos, la ruta de la macro le permite poner el nombre del argumento del problema en el mensaje de error, no solo el valor. No creo que puedas hacer eso con una función. – clartaq
Las condiciones previas y posteriores están documentadas aquí http://clojure.org/special_forms Busque el mapa de condiciones. – Chouser