Новости | 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[] # ...