2012-05-25 8 views
11

C'è qualcosa come struct-map per i record? In caso contrario, dovrei usare una struct (i documenti scoraggiano l'uso delle strutture)?Come popolare un record Clojure da una mappa?

Forse sto facendo completamente la cosa sbagliata? Ho una funzione piuttosto complessa che al momento richiede una mappa di opzioni. Sto cercando di chiarire quali valori di opzione sono accettabili/utilizzati (sostituendolo con un record). E ora voglio interfacciarlo al codice che ha questa informazione nelle mappe (e che contengono un superset dei dati nel record).

risposta

19

Non è consigliabile utilizzare i record semplicemente per "documentazione": le vecchie mappe semplici sono più flessibili, più semplici e più semplici. Per la documentazione, è sufficiente aggiungere una docstring o un commento o creare una funzione come (defn make-whatever [thing1 thing2]).

Se si desidera ancora un record, sono disponibili due opzioni a seconda che si stia utilizzando la versione 1.3 del clojure o successiva. In tal caso, (defrecord Whatever ...) definisce anche una funzione map->Whatever e una funzione ->Whatever che accetta argomenti posizionali. In caso contrario, è possibile scrivere (into (Whatever. nil nil nil) some-map) (passando il numero corretto di nils per il tipo di record).

Problemi correlati