是否可以在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