defrecord
в clojure позволяет определять простые контейнеры данных с настраиваемыми полями.
e.g.
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
построения?
(map->Book {:author "J.R.R Tolkien", :title "The Lord of the Rings", :ISBN 9780618517657)
или#user.Book{:author "J.R.R Tolkien", :title "The Lord of the Rings", :ISBN 9780618517657}
- person Claude   schedule 27.03.2012