2011-01-27 19 views
11

Tengo curiosidad sobre cómo hacer un deftype Clojure que contiene una referencia a sí mismo, p.Cómo lograr un deftype recursivo

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

Esto no funciona ... sin embargo no veo ninguna razón intrínseca por la que no debería ser posible ya que la clase Java subyacente es perfectamente capaz de referirse a sí mismo.

¿Qué estoy haciendo mal aquí?

Mike.

Respuesta

10

Actualmente^Las sugerencias de clase en los campos (en oposición a^sugerencias primitivas) se descartan, por lo que no hay ganancia al tratar de ponerlas. Esto puede cambiar en el futuro.

Sin embargo, la referencia automática en una definición de tipo (por ejemplo, en cuerpos de método, no en campos) funciona de alguna manera, pero la implementación es un poco hack. Hay pocos incentivos para corregir la referencia automática en el compilador actual de Java, dada la promesa de la reescritura del compilador en Clojure.

+0

gracias - explicación muy útil (aunque también es molesto ya que me gustaría utilizar algunas referencias recursivas!) – mikera

Cuestiones relacionadas