Junction (класс)

Класс предназначен для хранения кода и контекста его выполнения.
При обращении к переменным, хранящим в себе junction, Parser выполняет код в сохраненном контексте.

Значение типа
junction появляется в переменной…

…при присваивании ей кода:
$junction{Код, присваиваемый переменной: ^do_something[]}

…при передачи кода параметром:
@somewhere[]
^method{
Код, передаваемый параметром: ^do_something_else[]}

@method[parameter]
#здесь в $parameter придет junction

…при обращении к имени метода класса:
$action[$user:edit]
#$action[
$user:delete]
^action[параметр]

Здесь
$action хранит ссылку на метод и его класс, вызов action теперь аналогичен вызову ^edit[параметр].

…при обращении к имени метода объекта:
$action[$person.show_info]
^action[full]

Здесь
$action хранит ссылку на метод и его объект, вызов action теперь аналогичен вызову ^person.show_info[параметры].

Пример junction выражений и кода
@possible_reminder[age;have_passport]
^myif($age>=16 && !$have_passport){
    Тебе уже $age лет, пора сходить в милицию.
}

@myif[condition;action][age]
$age(11)
^if($condition){
    $action
}


Напоминание: параметр с выражением, это код, вычисляющий выражение, он выполняется - вычисляется выражение - при каждом обращении к параметру внутри вызова.

Здесь оператору
myif передан код, печатающий, среди прочего, $age. Выполнение проверки и кода оператор производит в сохраненном (внутри $condition и $action) контексте, поэтому наличие в myif локальной переменной age и ее значение никак не влияет на то, что будет проверено и что напечатано.

Пример проверки наличия метода
^if($some_method is junction){
    
^some_method[параметр]
}
{
    нет метода
}

Метод
some_method, будет вызван только, если определен.


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