parser

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

 

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

Ответ

Misha v.3 26.04.2011 02:01

раньше файл сам себя не подключал. обновился парсер (был Parser/3.4.1b) и стал подключать
раньше была защита от повторного подключения файла.
т.е. если сделать:
^use[file.p]
^use[file.p]
то второй вызов ничего делать не будет, т.к. файл уже бал загружен ранее (с @USE аналогично).

НО. это работало только в случае указания абсолютно идентичных путей, например, в случае:
^use[file.p]
^use[../classes/file.p]
если file.p лежит в classes, то он подключался бы дважды (и дважды срабатывал-бы его @auto[], что может быть критично).

теперь перед проверкой уже подключенности файла делается нормализация путей, и даже во втором случае файл file.p будет подключен один раз.

до кучи добавили возможность искать подключаемый файл относительно того файла, в котором написан use (если путь указан без начального слэша, который, как все знают, у нас в этом месте означает document_root). это удобно, когда есть набор взаимосвязанных классов. их можно положить в один каталог (или в известную _им_ иерархию каталогов) и пользоваться этой новой фичей, не прописывая ничего в CLASS_PATH.


но в вашем случае повторный вызов ^use[test.p3] раньше не срабатывал (причем некорректно, т.к. начального слеша нет, а CLASS_PATH мог измениться между вызовами, и в путях мог появиться другой файл с таким-же именем).

ну и до кучи, если у вас в CLASS_PATH был прописал /, то при наличии двух файлов с одинаковыми именами в корне и рядом с файлом, откуда идёт подключение, теперь будет в первую очередь подключаться тот файл, который находится по пути относительно текущего.


мы не стали писать про несовместимое изменение, т.к. не ожидали, что у кого-то вообще подобное встретиться. как видим -- мы были не правы :)