Sto sviluppando una struttura dati complessa in Clojure con più sotto strutture.Estrazione dai dettagli di implementazione della struttura dati in Clojure
So che vorrò estendere questa struttura nel tempo e, a volte, vorrò cambiare la struttura interna senza rompere i diversi utenti della struttura dati (ad esempio, potrei voler cambiare un vettore in una hashmap, aggiungere qualche tipo di struttura di indicizzazione per motivi di prestazioni, o incorporare un tipo Java)
mio pensiero attuale è:
- definire un protocollo per la struttura complessiva con i vari metodi di accesso
- Creare una mini-biblioteca di funzioni che navigano nella struttura dei dati e .es. (Query-sottostruttura-abc param1 param2)
- Implementare la struttura di dati utilizzando defrecord o DEFTYPE, con i metodi di protocollo definiti di utilizzare la mini-biblioteca
Penso che questo funzionerà, anche se sono preoccupato che sta iniziando a somigliare a un sacco di codice "colla". Inoltre, probabilmente riflette anche la mia maggiore familiarità con gli approcci orientati agli oggetti.
Qual è il modo consigliato per farlo in Clojure?
Grazie Michal! Insightful as ever :-) esaminerà sicuramente le opzioni ILookup e Associative – mikera
Questa è una risposta molto utile! Ma quasi tre anni dopo sarebbe bello aggiornare questo (o creare una nuova risposta) in base alla funzionalità ora disponibile in 1.5. Una cosa che ho notato è che 'defrecord' ora emette funzioni di fabbrica, non so quali altre modifiche potrebbero influenzare questa risposta. –
Penso che questa risposta possa usare anche un aggiornamento - anche il libro O'Reily Clojure ora dice che il defrecord del clojure crea funzioni di fabbrica. – djhaskin987