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



Copyright © 1997–2024 Art. Lebedev Studio | http://www.artlebedev.ru Дата обновления: 02.07.2024