defrecord
in clojure consente di definire semplici contenitori di dati con campi personalizzati.Macro consigliate per aggiungere funzionalità al costruttore di defrecord di Clojure?
ad es.
user=> (defrecord Book [author title ISBN])
user.Book
Il costruttore minima che si traduce in soli argomenti posizionali senza funzionalità aggiuntive come ad esempio inadempiente dei campi, la convalida di campo ecc
user=> (Book. "J.R.R Tolkien" "The Lord of the Rings" 9780618517657)
#:user.Book{:author "J.R.R Tolkien", :title "The Lord of the Rings", :ISBN 9780618517657}
E 'sempre possibile scrivere funzioni avvolgendo il costruttore di default per ottenere semantica della costruzione più complessa: utilizzo di argomenti di parole chiave, fornitura di valori predefiniti e così via.
Questo sembra lo scenario ideale per una macro per fornire semantica espansa. Quali macro hanno scritto e/o raccomandato persone per la costruzione più ricca defrecord
?
Vorrei sottolineare che defrecord ha molto più successo in termini di come funziona con l'ecosistema Clojure/Java, "contenitori di dati semplici" sopra non significa affatto rudimentale, anzi il contrario. –
Va detto che da clojure 1.3.0, puoi fare '(mappa-> Libro {: autore" JRR Tolkien ",: titolo" Il Signore degli Anelli ",: ISBN 9780618517657)' o '# user.Book {: autore "JRR Tolkien",: titolo "Il signore degli anelli",: ISBN 9780618517657} ' – Claude
Per la documentazione sulle caratteristiche annotate da Claude, vedere: http://dev.clojure.org/display/design/defrecord+ miglioramenti –