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 を実行すると「コンストラクターを構築する引数が多すぎます」が表示されます。
この問題に間違った方法でアプローチしている場合は、何をすべきか教えてください。Clojure の Google グループを検索しても何も見つかりませんでした。
編集:
私の質問の文は、私が思っていたほど明確ではなかったと思います。
1.) Clojure である構造体を別の構造体内にネストすることは可能ですか? (下から判断すると、イエスです。)
2.) もしそうなら、正しい構文は何ですか? (繰り返しますが、下から判断すると、これを行う方法がいくつかあるようです。)
3.) 構造体が別の構造体内にネストされている場合、指定したキーで値を取得するにはどうすればよいですか?
私のサンプル コードは、私がしようとしていることをうまく示していなかったと思います。これをここに追加して、これを検索している他のユーザーがこの質問とその回答をより簡単に見つけられるようにします。