Предоставить конструктору Clojure reify

Когда используешь reify в Clojure, как я могу предоставить выражение для конструктора?

В качестве альтернативы, как я могу передать аргументы конструктору базового класса?

1 ответ

Решение

Вы не можете использовать reify создавать подклассы и создавать экземпляры классов - он предназначен только для использования с протоколами и интерфейсами. (Вы можете предоставить реализации методов Object, хоть.)

Для создания экземпляров анонимных подклассов произвольных классов и / или интерфейсов используйте proxy, Все аргументы суперкласса ctor прокси-сервера, если таковые имеются, идут в args вектор (второй аргумент) proxy форма:

(proxy [SomeClass SomeInterface-1 ...] [ctor-arg-1 ...]
  ; method impls follow
  ...
  )

Увидеть (doc proxy) Больше подробностей.

Другие вопросы по тегам