2011-01-27 75 views
11

我很好奇如何做一个包含自身引用的Clojure deftype,如何实现递归deftype

(deftype BinaryTree [^BinaryTree left ^BinaryTree right]) 

这不起作用......但是我看不出内在的原因,因为底层的Java类完全可以引用自己。

我在这里做错了什么?

Mike。

回答

10

当前^字段提示字段(与^原始提示相对)被放弃,所以在尝试放置它们时没有任何好处。这可能在未来发生变化。

但是在类型定义中的自动引用(例如,在方法体中,而不是在字段中)有些作用,但是实现有点破解。考虑到在Clojure中重写编译器的承诺,在当前的java编译器中修复自动引用的动机不大。

+0

谢谢 - 非常有帮助的解释(虽然也很烦人,因为我真的想使用一些递归引用!) – mikera 2011-02-02 20:20:15