deftype vs. defrecord

vem*_*emv 31 clojure clojurescript

虽然defrecord是Clojure中用于定义"实体"的一般情况的首选形式,但在ClojureScript中,可以找到更多的引用deftype,如各种 文档中所反映的那样.

两种形式有什么区别?哪个应该更喜欢?

lev*_*and 45

deftype 创建一个实现协议的简单对象.

defrecord 创建一个实现协议的不可变持久映射.

使用哪个取决于你想要什么.您想要一个完整的ClojureScript数据结构吗?然后使用记录.你只是想要一个除了满足协议之外什么都不做的简单的事情吗?然后使用一种类型.

您引用的两个文档使用类型,因为它们试图在最基本的级别上说明协议,并且类型比记录更少"继续",可以这么说.

但是,Clojure/ClojureScript中对象类事物的大多数现实使用需要将数据字段与对象一起存储,为此您应该着重使用记录,出于同样的原因,您应该使用任何Clojure的不可变集合.