Рекомендуемые макросы для добавления функциональности в конструктор defrecord Clojure?

defrecord в clojure позволяет определять простые контейнеры данных с настраиваемыми полями.

eg

user=> (defrecord Book [author title ISBN])
user.Book

Минимальный конструктор, который приводит к результатам, принимает только позиционные аргументы без дополнительные функции, такие как установка полей по умолчанию, проверка полей и т. д.

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}

Всегда можно написать функции, обертывающие конструктор по умолчанию, чтобы получить более сложную семантику построения - используя аргументы ключевого слова, предоставляя значения по умолчанию и так далее.

Это кажется идеальным сценарием для макроса, обеспечивающего расширенную семантику. Какие макросы написаны и / или рекомендуются для более расширенной конструкции defrecord ?

12
задан Alex Stoddard 4 October 2010 в 15:32
поделиться