method. Получение метода объекта   [3.4.2]

^reflection:method[объект;имя метода]
^reflection:method[класс;имя метода]

Возвращает метод объекта или класса. Может быть использован в пользовательских классах, где приоритет доступа к полям выше, чем к методам с тем же именем.

^reflection:method[метод]   [3.4.5]
^reflection:method[метод;объект]   [3.4.5]

Привязывает метод к вызывавшему его объекту или классу или к переданному вторым параметром объекту или классу.
В Parser все методы привязаны к контексту исполнения (self) и таким образом можно поменять эту привязку.

Пример

@main[]
$a[^A::create[]]

^a.m[] - метод m не может использоваться напрямую, т.к. одноименное поле m больший приоритет
поэтому используем ^reflection:method[] чтобы добраться до метода m

$method[^reflection:method[$a;m]]
^method[]

$b[^B::create[]]

подменяем self, чтобы вызвать метод m в контексте другого объекта, сохраняем результат в объекте b
$b.m[^reflection:method[$method;$b]]

# теперь в объекте b тоже есть метод m
^b.m[]

@CLASS
A

@create[]
$name[object of class A]
$m[object field]

@m[]
method of class A, called on $name

@CLASS
B

@create[]
$name[object of class B]

Выведет:

method of class A, called on object of class A
method of class A, called on object of class B




In order to add comments you must register.
Copyright © 1997–2021 Art. Lebedev Studio | http://www.artlebedev.ru Дата обновления: 25.04.2017