| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
mashi 09.02.2006 16:39
Может добавить его в общий lib.p###############################################################
# компилирует модуль в контексте своего вызова
@my_use[modul_path][pname;process_body]
^if(!def $MAIN:processes){$MAIN:processes[^hash::create[]]}
^if(^modul_path.pos[/]){
# если путь модуля начинается НЕ со слеша, то прибавляем к нему путь каталога классов
$modul_path[${MAIN:CLASS_PATH}/$modul_path]
}
$pname[^math:md5[$modul_path]]
^if(!$MAIN:processes.$pname){
^try{
$process_body[^file::load[text;$modul_path]]
$process_body[^taint[as-is][^trim[$process_body.text]]]
^if(^process_body.pos[@main^[^]] >= 0){
# если в нем есть буковки '@main[]' -- меняем их
$process_body[^process_body.match[\@main\^[\^]][g]{@${pname}^[^]}]
}{
# а если их нету, и в файле что-то есть -- приделываем их в самое начало
^if(def $process_body){
$process_body[@${pname}^[^] ^#0A$process_body]
}
}
}{
# какой-то облом, ну и фиг с ним. бум считать, что кода нету
$exception.handled(1)
$process_body[]
}
^process[$caller.self]{$process_body}
# запоминаем, что мы его уже откомпилили
$MAIN:processes.$pname(1)
}
### end of @my_process[]Пример использования @CLASS
my_class
@create[params]
# ...
^if(^params.for_admin.int(0)){
# если создают объект для администрирования, то в контексте текущего класса
# компелируем методы из модуля my_class_admin.p
^my_use[my_class/my_class_admin.p]
# Причем, повторное подключение не приведет к повторной компиляции
^my_use[my_class/my_class_admin.p]
}
# ... ########### my_class_admin.p ########### @method_1[] # ... @method_2[] # ... @method_N[] # ...