Как добиться рекурсивного дефтипа - PullRequest
11 голосов
/ 27 января 2011

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

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

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

Что я здесь не так делаю?

Майк.

1 Ответ

10 голосов
/ 27 января 2011

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

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

...