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
?