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

       

Definemethod


Определение методов и пользовательских операторов


@имя[параметры]  

тело


@имя[параметры][локальные переменные]   

тело




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

Локальные переменные видны в пределах оператора или метода, и изнутри вызываемых ими операторов и методов, см. ниже $caller.

При описании метода можно пользоваться не только параметрами или локальными переменными, а также любыми другими именами, при этом вы будете работать с полями класса, или полями объекта, в зависимости от того, как был вызван определенный вами метод, статически, или динамически.

В Parser вы можете расширить базовый набор операторов, операторами в Parser считаются методы класса MAIN.

Системная переменная: self

Все методы и операторы имеют локальную переменную self, она хранит ссылку на текущий объект, в статических методах хранит то же, что и $CLASS.

Пример:

@main[]  

$a[Статическое поле ^$a класса MAIN]

^test[Параметр метода]

@test[a]  

^$a - $a  <br>  

^$self.a - $self.a  

   

Выведет:

$a - Параметр метода  

$self.a - Статическое поле $a класса MAIN

Системная переменная: result

Все методы и операторы имеют локальную переменную result. Если ей присвоить какое-то значение, то именно оно будет результатом выполнения метода. Значение переменной result можно считывать и использовать в вычислениях.

Пример:

@main[]

$a(2)

$b(3)

$summa[^sum[$a;$b]]

$summa

@sum[a;b]

^eval($a+$b)

$result[Ничего не скажу!]


Здесь клиенту будет выдана строка Ничего не скажу!, а не результат сложения двух чисел.



Важно: операторы, это методы класса MAIN, но в отличие от методов других классов, их можно вызвать из любого класса просто по имени, т.е. можно писать ^include[…], вместо громоздкого ^MAIN:include[…].

Системная переменная: caller

Все методы и операторы имеют локальную переменную caller, которая хранит «контекст вызова» метода или оператора.

Через нее можно:

·узнать, кто вызвал вызвавший описываемый метод или оператор, обратившись к $caller.self;

 

·считать - $caller.считать, или записать - $caller.записать[значение] переменную, как будто вы находитесь в том месте, откуда вызвали описываемый метод или оператор.  

Например вам нужен оператор, похожий на системный for, но чем-то отличающийся от него. Вы можете написать его сами, воспользовавшись возможностью менять локальную переменную с именем, переданным вам, в контексте вызова вашего оператора.

@steppedfor[name;from;to;step;code]

$caller.$name($from)

^
while($caller.$name<=$to){

   $code

   ^caller.$name.
inc($step)

}



Теперь такой вызов…

@somewhere[][i]

^steppedfor[i](1;10;2){$i }



…напечатает «1 3 5 7 9 », обратите внимание, что изменяется локальная переменная метода somewhere.



Примечание: возможность узнать контекст вызова удобна для задания контекста компиляции кода (см. «process. Компиляция и исполнение строки».




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