Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
G_Z 14.09.2016 05:18
Задача: включить в класс набор свойств из файла (посредством process) и иметь возможность в классах наследниках перекрыть включённые свойства.@main[] $class[^class::create[]] $class.property1<br/> $class.property2 @CLASS base @auto[] ^process[$self.CLASS]{@GET_property1[] included base property1 } ^process[$self.CLASS]{@GET_property2[] included base property2 } @CLASS class @BASE base @create[]Получаем ожидаемое:
included base property1 included base property2Пытаемся переопределить одно из свойств:
@main[] $class[^class::create[]] $class.property1<br/> $class.property2 @CLASS base @auto[] ^process[$self.CLASS]{@GET_property1[] included base property1 } ^process[$self.CLASS]{@GET_property2[] included base property2 } @CLASS class @BASE base #@auto[] @create[] @GET_property1[] defined class property1Неожиданно получаем то же:
included base property1 included base property2Стоит раскомментировать @auto дочернего класса — получаем ожидаемое:
defined class property1
included base property2
Выходит, выполняются оба @auto[], что противоречит документации.@main[] $class[^class::create[]] $class.property1<br/> $class.property2 @CLASS base @auto[] ^process[$self.CLASS]{@GET_property1[] included base property1 } ^process[$self.CLASS]{@GET_property2[] included base property2 } $log[^reflection:uid[$self] base auto^#0A] ^log.save[append;/log.txt] @CLASS class @BASE base @auto[] $log[^reflection:uid[$self] class auto^#0A] ^log.save[append;/log.txt] @create[] @GET_property1[] defined class property1Видим в логе:
0x10e18f0b0 base auto 0x10e18f000 class autoПри этом, даже если закомментировать @auto[] дочернего класса и посмотреть в лог получим:
0x103dc20b0 base auto 0x103dc2000 base autoСудя по всему, повторное выполнение происходит из-за process.