是否可以在Clojure中的結構中嵌套結構?請看下面的代碼: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無零」,但如果我做了表格2,我會得到「結構構造函數太多的參數」。
如果我以錯誤的方式處理這個問題,請告訴我我該怎麼做。搜索Clojure谷歌組對我來說沒有任何東西。
編輯:
我想我是不是我的問題的聲明明確的,因爲我以爲我是:
1)是否有可能一個嵌套結構內另一個Clojure的? (從下面判斷,這是肯定的。)
2.)如果是這樣,那麼正確的語法是什麼? (再次,從下面判斷,看起來好像有幾種方法可以做到這一點。)
3.)當你有一個嵌套在另一個結構中的結構體時,如何通過指定的鍵獲取值?
我想我的示例代碼並沒有真正證明我試圖做得很好。我在這裏添加這個,以便其他人可以更容易地找到這個問題和答案。
謝謝保羅 - 這正是我想知道的。 – 2009-02-17 22:38:24