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

Opprocess


process. Компиляция и исполнение строки


^process{строка}

^process[контекст]{строка}

^process[контекст]{строка}[опции]   [3.1.2]


Строка будет скомпилирована и выполнена как код на Parser, в указанном контексте, или в текущем контексте.



В качестве контекста можно указать объект или класс.

Удобно использовать, если какие-то части кода или собственные методы необходимо хранить не в файлах .html, которые обрабатываются Parser, а в каких-то других, или базе данных.

Также можно указать ряд опций (хеш):

·$.main[новое имя для метода main, описанного в коде строки}

 

·$.file[имя файла, из которого взята данная строка}

 

·$.lineno(номер строки в файле, откуда взята данная строка. может быть отрицательным)

 


Простые примеры

^process{@extra[]

   Здоровья прежде всего…

}

Метод extra будет добавлен к текущему классу, и его можно будет вызывать в дальнейшем.

^process[$engine:CLASS]{@start[]

   Мотор…

}

Метод start будет добавлен к пользовательскому классу engine.

$running_man[^man::create[Вася]]

^process[$running_man]{

    Имя: $name<br>

}

Код будет выполнен в контексте объекта $running_man, соответственно, может воспользоваться полем name этого объекта, выдаст «Вася».

Оператор include

@include[filename][file]

$file[^file::load[text;$filename]]

^process[$caller.self]{^taint[as-is][$file.text]}[

   $.file[$filename]

]

Код загружает указанный файл и выполняет его в контексте вызова include. Опция file позволяет указать имя файла, откуда был загружен код. Если возникнет ошибка, вы увидите это «имя файла».

Сложный пример

Часто удобно поместить компилируемый код в некоторый метод с именем, вычисляющимся по ходу работы:

# это исходный код, обратите внимание, на ^^

$source_code[2*2=^^eval(2*2)]

# по ходу работы выясняется, что необходимо создать метод с именем method1

$method_name[method1]

компилируем исходный кодпомещяем его в новый метод

^process{$source_code}[

   $.main[$method_name]

]


# далее по коду можно вызывать метод method1

^method1[]

Данный пример будет продолжать работать, даже если в $source_code будет определен ряд методов, поскольку опция main задает новое имя методу main.


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



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