![]() |
1
3
你可以把任意多的元素放到一个向量中。记录有一组字段。如果要将节点限制为只有N个子节点,则记录可能是好的,例如,生成一个二叉树,其中一个节点必须只有一个左节点和一个右节点。但是对于HTML或XML之类的东西,您可能希望支持任意数量的子节点。
使用向量和关键字意味着“扩展”支持的节点类型集非常简单,只需在向量中放入一个新关键字即可。
向量是Clojure的基本数据类型之一,您可以使用Clojure的内置函数来操作它们。想延长你的树吗?只是
似乎这部分可以归结为动态与静态的争论。就我个人而言,我会走动态(矢量+关键字)路线,除非对使用记录的好处有特殊需要。这样编写代码可能更容易,而且对用户来说也更灵活,但代价是用户更容易陷入混乱。但是Clojure的用户可能已经习惯了必须定期处理危险武器。Clojure在很大程度上是一种动态语言,保持动态通常是正确的做法。 |
![]() |
2
3
1.2中的记录还没有完全“完成”,但是自己构建这些东西非常容易。我们有一个 defrecord2 它增加了构造函数(newfoo)、字段验证、打印支持、pprint支持、通过zippers的树遍历/编辑支持等。 我们使用它的一个例子是表示ast或执行计划,其中节点可能是Join、Sort等。 向量更适合于创建字符串之类的东西,在字符串中,每个节点可以放置任意数量的东西。如果您可以填充1+<p>s内部a<div>,那么您就不能创建一个包含:p字段的记录-这根本没有任何意义。在这种情况下,向量更加灵活和惯用。 |
![]() |
Freid001 · 具有最小和最大限制的架构? 6 年前 |
![]() |
phlie · Hoplon With Castra加载后端时出错 7 年前 |
![]() |
David Furnam · Clojure从数组中获取坐标 7 年前 |
![]() |
Jeroen · 如何将惰性序列转换为映射? 7 年前 |