虽然defrecord
是 Clojure 中定义“实体”的首选形式(对于一般情况),但在 ClojureScript 中,可以找到更多对 . 的引用,如各种文档deftype
中所反映的那样。
两种形式有什么区别?应该更喜欢哪一个?
deftype
创建一个实现协议的基本对象。
defrecord
创建一个实现协议的不可变持久映射。
使用哪个取决于您想要什么。你想要一个完整的 ClojureScript 数据结构吗?然后使用记录。你只是想要一个除了满足协议之外什么都不做的简单的东西吗?然后使用类型。
您引用的这两个文档使用类型,因为它们试图在最基本的级别上说明协议,并且可以说类型比记录更少“进行”。
但是,在 Clojure/ClojureScript 中,大多数实际使用的类对象事物都需要将数据字段与对象一起存储,因此您应该强调使用记录,出于同样的原因,您应该使用 Clojure 的任何不可变集合。