defrecord
en clojure permite definir contenedores de datos simples con campos personalizados.¿Macros recomendadas para agregar funcionalidad al constructor defrecord de Clojure?
p. Ej.
user=> (defrecord Book [author title ISBN])
user.Book
El constructor mínima que resulta tarda sólo argumentos posicionales con ninguna funcionalidad adicional, como el impago de los campos, la validación de campos, etc.
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}
Siempre es posible escribir funciones envolviendo el constructor por defecto para obtener Semántica de construcción más compleja: utilizar argumentos de palabra clave, proporcionar valores predeterminados, etc.
Parece el escenario ideal para que una macro proporcione una semántica ampliada. ¿Qué macros han escrito y/o recomendado las personas para la construcción más rica de defrecord
?
Debo señalar que defrecord tiene mucho más que ofrecer en términos de cómo funciona con el ecosistema Clojure/Java, los "contenedores de datos simples" anteriores no significan nada rudimentarios, sino todo lo contrario. –
Debe mencionarse que desde clojure 1.3.0, puede hacer '(map-> Book {: author" JRR Tolkien ",: título" The Lord of the Rings ", ISBN 9780618517657)' o '# user.Book {: autor "JRR Tolkien",: título "El señor de los anillos", ISBN 9780618517657} ' – Claude
Para la documentación sobre las características señaladas por Claude, consulte: http://dev.clojure.org/display/design/defrecord+ mejoras –