deftype vs. defrecord

时间:2012-10-31 02:46:54

标签: clojure clojurescript

虽然defrecord是Clojure中用于定义“实体”的一般情况的首选形式,但在ClojureScript中可以找到更多对deftype的引用,如{{3}中所示。 } various

两种表格有什么区别?哪个人更喜欢?

2 个答案:

答案 0 :(得分:44)

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

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

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

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

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

答案 1 :(得分:0)

根据DEFTYPE VS DEFRECORD, 您应该区分编程构造领域构造

deftype用于编程结构,defrecord用于需要自定义类型的域结构。

希望这会有所帮助。

相关问题