问题 如何实现递归deftype


我很好奇如何做一个包含对自身的引用的Clojure deftype,例如

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

这不起作用......但是我没有看到为什么它不应该是可能的内在原因,因为底层Java类完全能够引用它自己。

我在这做错了什么?

麦克风。


9141
2018-01-27 14:17


起源



答案:


目前,字段上的^类提示(与^原始提示相对)被丢弃,因此尝试放置它们没有任何好处。这可能在将来发生变化。

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


10
2018-01-27 14:44



谢谢 - 非常有用的解释(虽然也很讨厌,因为我真的想使用一些递归引用!) - mikera


答案:


目前,字段上的^类提示(与^原始提示相对)被丢弃,因此尝试放置它们没有任何好处。这可能在将来发生变化。

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


10
2018-01-27 14:44



谢谢 - 非常有用的解释(虽然也很讨厌,因为我真的想使用一些递归引用!) - mikera