是否可以在 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 谷歌组并没有为我找到任何东西。
编辑:
我想我在问题的陈述中并没有我想的那么清楚:
1.) 是否可以在 Clojure 中将一个结构嵌套在另一个结构中?(从下面判断是肯定的。)
2.) 如果是这样,正确的语法是什么?(再一次,从下面来看,似乎有几种方法可以做到这一点。)
3.) 当你有一个嵌套在另一个结构中的结构时,你如何通过指定的键获取一个值?
我想我的示例代码并没有真正证明我想要做得很好。我在此处添加此内容,以便其他搜索此内容的人可以更轻松地找到此问题及其答案。