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
?