| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Misha v.3 05.03.2004 21:59
Пример 1:@my_method[] код методаindex.html:
^if($my_method is "junction"){
^my_method[]
}Пример 2 (более сложный, но его я активно использую):@main[]
# в этом хеше мы будем хранить ссылки на junctions.
$processes[^hash::create[]]
...
# затем в него каким-то образом попадают записи о внешних файлах, которые нам придется выполнять
...
# ну а когда надо выполнять зовем свой метод
# при этом файл с диска будет загружен только один раз, и
# отпроцессен один раз, при повторном вызове будет обращение
# к уже созданному методу (junction)
^for[i](1;100){
^my_process[5]
}
@my_process[id]
^if(!$processes.[$id].process_body_loaded){
^rem{ *** еще не грузили данный код (соответственно не процессили) *** }
$pname[process_${id}_main]
^try{
$pf[^file::load[text;каталог/$processes.[$id].process]]
$process_body[^taint[as-is][^trim[$pf.text]]]
^if(^process_body.pos[@main^[^]] >= 0){
^rem{ *** если в нем есть буковки @main[] - меняем их *** }
$process_body[^process_body.match[\@main\^[\^]][g]{@${pname}^[^]}]
}{
^rem{ *** а если их нету, и в файле что-то есть - приделываем их в самое начало *** }
^if(def $process_body){
$process_body[@${pname}^[^] ^#0A$process_body]
}
}
}{
^rem{ *** какой-то облом, ну и фиг с ним. бум считать, что кода нету *** }
$exception.handled(1)
$process_body[]
}
^rem{ *** вот теперь можно процессить код и создавать метод *** }
^process[$caller.self]{$process_body}
^rem{ *** запоминаем, что мы его уже отпроцессили, и нам не надо его больше будет пытаться грузить и компилить *** }
^processes.[$id].add[
$.process_body_loaded(1)
$.main[$$pname]
]
}
^if($processes.[$id].main is "junction"){
^rem{ *** если метод есть - выполняем его *** }
$result[^trim[^processes.[$id].main[]]]
}{
$result[]
}