parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

mashi 28.05.2006 02:06 / 28.05.2006 02:15

Если у вас боольшой обработчик, то что вам мешает вынести код обработчика в отдельный класс и не переживать за перекрытия методов? А в обработчике создавать объект класса и пользоваться его методами.

Если у вашего документа (=объекта) десять блоков со своими обработчиками, то учтите что эти обработчики будут компилироваться и выполняться последовательно. Т.е. даже если в этих обработчиках (теоретически) совпадут имена методов и при компиляции они друг друга перекроют, то ничего страшного не случится, т.к. первый метод перекроется вторым после того как он уже будет не нужен.

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


Предлогаю создать пустой статический класс
@CLASS
empty
#
и компилировать все обработчики в его контексте.
^use[empty.p]
$process_code[^file::load[text;process.txt]]
^process[$empty:CLASS]{^taint[as-is][$process_code.text]}[
	$.main[main_method]
]
^empty:main_method[]
Теперь совпасть могут только имена методов из различных обработчиков, что не страшно.
         * * *
UPDATE
Кстати, совсем забыл. Еще спасает уникальное имя метода main при компиляции. Для этого перед компиляцией нужно заменить имя главного метода на уникальное. Например ^math:md5[$path_to_process_file]

(вот как здесь: http://www.parser.ru/forum/?id=49653)