2011-01-27 2 views
11

Мне любопытно, как сделать Clojure deftype, который содержит ссылку на себя, например.Как добиться рекурсивного deftype

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

Это не работает ... Но я не вижу никакой внутренней причины, почему это не должно быть возможным, так как базовый класс Java вполне может ссылаться на себя.

Что я здесь делаю неправильно?

Mike.

ответ

10

В настоящее время^Классы намеки на поля (в противовес^примитивным подсказкам) отбрасываются, поэтому нет никакой выгоды в их попытке их поместить. Это может измениться в будущем.

Однако автоссылка в определении типа (например, в телах методов, а не в полях) несколько работает, но реализация немного взломана. Существует небольшой стимул для исправления автоматической ссылки в текущем java-компиляторе, учитывая обещание переписать компилятор в Clojure.

+0

спасибо - очень полезное объяснение (хотя и раздражает, так как я действительно хотел бы использовать некоторые рекурсивные ссылки!) – mikera

Смежные вопросы