defrecord
в clojure позволяет определять простые контейнеры данных с пользовательскими полями.
например,
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
?