E 'possibile avere una struttura annidata all'interno di una struttura in Clojure? Si consideri il seguente codice:Struttura del clojure annidata in un'altra struttura
(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)
Naturalmente questo è un esempio inventato, ma ci sono casi in cui voglio spezzare una grande struttura di dati in strutture più piccole per rendere il codice più facile da mantenere. Come i commenti indicano se faccio il modulo 1 ottengo "249 nil zero", ma se faccio il modulo 2 ottengo "Troppi argomenti per struct constructor".
Se mi sto avvicinando a questo problema nel modo sbagliato, per favore dimmi cosa dovrei fare. La ricerca nel gruppo google Clojure non ha rivelato nulla per me.
Edit:
Credo che non ero più chiaro nella dichiarazione della mia domanda come Pensavo:
1.) E 'possibile annidare una struct all'interno di un altro in Clojure? (Giudicando dal basso si tratta di un sì.)
2.) In tal caso, quale sarebbe la sintassi corretta? (Ancora una volta, a giudicare dal basso sembra che ci siano alcuni modi per farlo.)
3.) Come si recupera un valore con una chiave specificata quando si ha una struttura annidata in un'altra struttura?
Immagino che il mio codice di esempio non mostri davvero quello che stavo cercando di fare molto bene. Sto aggiungendo questo qui in modo che altri alla ricerca di questo possano trovare più facilmente questa domanda e le sue risposte.
Grazie Paul, questo è esattamente ciò che volevo sapere. –