Возможно ли иметь структуру, вложенную в структуру в Clojure? Рассмотрим следующий код:
(defstruct rect :height :width)
(defstruct color-rect :color (struct rect))
(defn
#^{:doc "Echoes the details of the rect passed to it"}
echo-rect
[r]
(println (:color r))
(println (:height r))
(println (:width r)))
(def first-rect (struct rect 1 2))
;(def c-rect1 (struct color-rect 249 first-rect)) ;form 1
;output "249 nil nil"
(def c-rect1 (struct color-rect 249 1 2)) ;form 2
;output "Too many arguments to struct constructor
(echo-rect c-rect1)
Конечно, это надуманный пример, но есть случаи, когда я хочу разбить большую структуру данных на более мелкие подструктуры, чтобы сделать код проще в обслуживании. Как показывают комментарии, если я делаю форму 1, я получаю «249 nil nil», но если я делаю форму 2, я получаю «Слишком много аргументов для конструктора конструкций».
Если я подхожу к этой проблеме неправильно, пожалуйста, скажите мне, что я должен делать. Поиск в группе Google Clojure для меня ничего не дал.
Edit:
Полагаю, я не так ясно сформулировал свой вопрос, как мне показалось:
1.) Можно ли в Clojure вкладывать одну структуру в другую? (Судя по снизу это да.)
2.) Если так, каким будет правильный синтаксис? (Опять же, судя по снизу, похоже, есть несколько способов сделать это.)
3.) Как получить значение по указанному ключу, если у вас есть структура, вложенная в другую структуру?
Полагаю, мой пример кода не очень хорошо продемонстрировал то, что я пытался сделать. Я добавляю это сюда, чтобы другим, кто ищет это, было легче найти этот вопрос и ответы на него.