EDIT: После публикации предыдущей версии моего вопроса я обнаружил, что настоящая проблема связана с вложенными функциями.Установка изменяемого поля в вложенной функции - deftype - clojure
Если у меня есть замыкание в пределах deftype
, я не могу обновить какие-либо изменяемые поля из этого закрытия.
E.g. следующие работы:
(deftype Test [^:unsynchronized-mutable x]
TestInterface
(perform [this o] (set! x o)))
, но это не делает:
(deftype Test [^:unsynchronized-mutable x]
TestInterface
(perform [this o] (fn [] (set! x o)) nil)) ; throws a compiler error about assigning to non-mutable field
Есть ли способ, чтобы достичь и доступа к полю? Делая (set! (.x this) o)
результаты:
ClassCastException user.Test не может быть приведен к compile__stub.user.Test user.Test/п - 152 (NO_SOURCE_FILE:. 3
При попытке запустить код
Код для TestInterface
для полноты:
(definterface TestInterface (perform [o]))
Вы можете включить TestInterface, чтобы я мог запустить пример? –
@ArthurUlfeldt Я обновил вопрос и добавил TestInterface. –
Это похоже на ошибку? какая версия clojure? –