Estoy desarrollando una estructura de datos compleja en Clojure con múltiples subestructuras.Resumen de los detalles de implementación de la estructura de datos en Clojure
Sé que querré ampliar esta estructura con el tiempo, y en ocasiones podría querer cambiar la estructura interna sin romper diferentes usuarios de la estructura de datos (por ejemplo, puede querer cambiar un vector en un hashmap, agregar algún tipo de estructura de indexación por razones de rendimiento, o incorporar un tipo Java)
Mi pensamiento actual es:
- definir un protocolo para la estructura general con varios métodos de acceso
- crear una mini-biblioteca de funciones que navegan por la estructura de datos e .gramo. (Consulta de subestructura-abc param1 param2)
- Implementar la estructura de datos utilizando defrecord o DEFTYPE, con los métodos de protocolo definidos para usar la mini-biblioteca
Creo que esto va a funcionar, aunque me preocupa que está empezando a parecer más como un montón de código de "pegamento". También probablemente también refleja mi mayor familiaridad con los enfoques orientados a objetos.
¿Cuál es la manera recomendada de hacer esto en Clojure?
Gracias Michal! Perspicaz como siempre :-) definitivamente mirará en las opciones de ILookup y Associative – mikera
¡Esta es una respuesta muy útil! Pero casi tres años después sería genial actualizar esto (o crear una nueva respuesta) basado en la función ahora disponible en 1.5. Una cosa que noté es que 'defrecord' ahora emite funciones de fábrica, no estoy seguro de qué otros cambios puedan afectar esta respuesta. –
Creo que esta respuesta también podría usar una actualización, incluso el libro O'Reily Clojure ahora dice que el defrecord de clojure crea funciones de fábrica. – djhaskin987