Язык скриптования сайтов Parser 3

       

Junctionclass


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



Содержание раздела