Я изучал Джулию и хотел потратить некоторое время на его тестирование, добавив некоторые из моих любимых функциональных / неизменяемых конструкций в язык.В частности: типы для отложенных вычислений и обещаний, такие как типы задержки и обещания clojure.
И задержки, и обещания в принципе аналогичны Ref{T}
с предупреждением о том, что (1) obj[]
может потребоваться ждатьЗначение или выполнить вычисление перед возвратом, когда obj
является обещанием или задержкой и (2) задержка / обещание может быть установлено только один раз и никогда не считываться до установки, поэтому является неизменным (по крайней мере, его интерфейс является интерфейсомнеизменный объект).
Моя интуиция здесь заключается в том, что и задержка, и обещание должны наследоваться от абстрактного неизменяемого типа ref, поскольку эта часть их поведения по крайней мере похожа;однако я не могу этого сделать:
abstract type ImmutableRef <: Ref end
недопустимый подтип в определении ImmutableRef
После просмотра исходного кода Julia, кажется,как и тип Ref
, тип не объявляется типичным образом, а объявляется в основном коде Си Джулии.Можно ли унаследовать от Реф в Юлии?Если нет, то каким был бы идиоматический способ Джулии реализовать / организовать подобные типы ref-like?