Класс предназначен для хранения кода и контекста его выполнения.
При обращении к переменным, хранящим в себе 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, будет вызван только, если определен.