2011-01-27 14 views
11

Sono curioso di sapere come eseguire un deftype Clojure che contiene un riferimento a se stesso, ad es.Come ottenere un deftype ricorsivo

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

Questo non funziona ... però vedo alcuna ragione intrinseca per cui non dovrebbe essere possibile poiché la classe Java sottostante è perfettamente in grado di riferirsi a se stesso.

Cosa sto facendo di sbagliato qui?

Mike.

risposta

10

Attualmente^I suggerimenti di classe sui campi (in opposizione a^suggerimenti primitivi) vengono scartati, quindi non c'è alcun vantaggio nel provare a metterli. Questo potrebbe cambiare in futuro.

Tuttavia il riferimento automatico in una definizione di tipo (ad es. Nei corpi del metodo, non nei campi) funziona in qualche modo ma l'implementazione è un po 'incisiva. C'è poco incentivo a correggere il riferimento automatico nel corrente compilatore java data la promessa della riscrittura del compilatore in Clojure.

+0

grazie - spiegazione molto utile (anche se anche fastidiosa come mi piacerebbe davvero usare alcuni riferimenti ricorsivi!) – mikera