parser

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

 

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

Свойства и наследование

G_Z 17.12.2015 01:38 / 18.12.2015 00:20

Win, Parser 3.4.4 RC.
@main[]
$t[^test2::create[]]
^t.print[]


@CLASS
test

@create[]
$self.value[some]

@print[]
$self.property

@GET_property[]
$result[[base value: $self.value]]


@CLASS
test2

@BASE
test

@GET_property[]
$result[$BASE:property, [child value: $self.value]]
Ожидаем: [base value: some], [child value: some].
Получаем: [base value: ], [child value: some].

Похоже, $BASE:property — это обращение к статическому полю класса, и трюк «динамический вызов, под видом статического» вызова методов базового класса с полями не работает.
Стоит декларировать статическое поле и значение будет получено.
@auto[]
$self.value[]
Тогда неясно как, и можно ли, обратиться к динамическим «полям родительского класса», организованным в виде свойств.

Поясню.
Хочется такого:
@main[]
$t[^test2::create[]]
^t.print[]


@CLASS
test

@create[]
$self.value[some]

@print[]
^self.property[]

@property[]
$result[[base value: $self.value]]


@CLASS
test2

@BASE
test

@property[]
$result[^BASE:property[], [child value: $self.value]]
но через доступ к геттерам посредством свойств.

Update.
Как оказалось, обратиться к «перекрытому свойству» родителя можно как к методу, вызвав геттер:
^BASE:GET_property[]
Не верх элегантности, но хоть что-то.