2011-01-27 108 views
11

我很好奇如何做一個包含自身引用的Clojure deftype,如何實現遞歸deftype

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

這不起作用......但是我看不出內在的原因,因爲底層的Java類完全可以引用自己。

我在這裏做錯了什麼?

Mike。

回答

10

當前^字段提示字段(與^原始提示相對)被放棄,所以在嘗試放置它們時沒有任何好處。這可能在未來發生變化。

但是在類型定義中的自動引用(例如,在方法體中,而不是在字段中)有些作用,但是實現有點破解。考慮到在Clojure中重寫編譯器的承諾,在當前的java編譯器中修復自動引用的動機不大。

+0

謝謝 - 非常有幫助的解釋(雖然也很煩人,因爲我真的想使用一些遞歸引用!) – mikera 2011-02-02 20:20:15