parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

G_Z 23.10 22:02 / 23.10 23:25

Насколько понимаю, цель в том, чтобы иметь подмешиваемые классы с «динамическим родителем».
То есть, в таком классе явно не указан @BASE (что не вызывает ошибки компиляции), но есть обращения к нему, и родителем станет родитель реципиента подмешивания.
@main[]
^foo:identify[]
^bar:identify[]


@CLASS
foo

@auto[]
^reflection:mixin[interface;$.methods(true)]


@CLASS
bar

@auto[]
^reflection:mixin[interface;$.methods(true)]


@CLASS
abstract

@identify[]
I am $self.CLASS_NAME


@CLASS
interface

@BASE
abstract
Результат:
I am foo
I am bar
Базовый abstract для примера — показать, что там может быть иерархия и обычным наследованием задачу не решить.

Идея лично мне кажется разумной, но противоречит сборке иерархии классов во время компиляции.

Тут помогла бы возможность переопределять или назначать базовый класс для подмешиваемых классов именно в момент подмешивания, a-la:
^reflection:mixin[…;$.base[override]]