什么时候应该在Clojure中使用deftype?

时间:2010-01-12 10:38:10

标签: clojure deftype

昨天,Rich把Clojure的“新”分支拉到了主人的手中。我们现在正在接受deftype和defprotocol的美。当然,我来自Haskell,我很想定义类似我在Haskell中的类型,这对于几乎所有缺少一次性元组的东西都是如此,但我不认为它在Clojure世界中的效果如此;)。在Clojure的Common Mistakes帖子中,有人提到过度使用结构是他第一次出现时犯的错误,来自OOP。由于deftypes似乎与结构类似,我想知道是否同样适用于那里。

所以,我的问题是:什么时候才能使用deftype?

1 个答案:

答案 0 :(得分:13)

一个领域deftype闪耀的是表现。协议的方法在deftype上非常快。 deftype也可能有原始字段,因此在处理数字时不再有拳击......

另一个领域可能是Java互操作,因为deftype可以实现接口(如果AOT编译)具有命名类。

一般来说,定义带有协议的抽象并使用deftype实现它们是基本的想法。

Rich详细介绍了他的动机:http://www.assembla.com/wiki/show/clojure/Datatypes