parser

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

 

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

Ответ

G_Z 17.10 18:46 / 17.10 18:50

Задача - реализовать аналог механизма Трейтов
Ну, то есть, требуется множественное наследование.
Я так понял, нужно сделать Базовый класс-заглушку. Чтобы не было ошибки при компиляции?
Вы хотите, чтобы подмешанные mixin'ом абстрактные методы при обращениях к базовому классу обращались к конкретному родителю объекта-реципиента?
#mixin.html
@main[]
^child:base_method[]<br/>
^child:self_method[]<br/>


@CLASS
abstract_base

@method[]
abstract_base method


@CLASS
mix

@BASE
abstract_base

@self_method[]
self_method

@base_method[]
^BASE:method[]


@CLASS
base

@method[]
base method


@CLASS
child

@BASE
base

@auto[]
^reflection:mixin[$mix:CLASS;$.methods(true)]
Должно быть
base method
self_method
а не
abstract_base method
self_method
да?

Для этого при подмешивании на лету нужно подменять базовый класс.
Кроме некрасивого process в голову пока ничего не приходит.
Либо перебирать подмешанные методы, проверять базовый класс и переписывать абстрактные методы реальными, что тоже так себе.