如何实现递归deftype

mik*_*era 11 clojure type-hinting deftype data-structures

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

  (deftype BinaryTree [^BinaryTree left ^BinaryTree right])
Run Code Online (Sandbox Code Playgroud)

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

我在这做错了什么?

麦克风.

cgr*_*and 10

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

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