parser

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

 

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

reflection: нагрузка и относительные пути

virusav 17.09.2021 09:56

Добрый день.
1. В коде часто приходится использовать конструкции:
^use[путь к классу]
^Класс::create[]
или
^Класс:method[]
С учетом структуры кода удобно использовать reflection, т.к. операции создания классов и вызова методов идут по определенным правилам + это сокращает код.

В связи с этим возникает вопрос: с точки зрения нагрузки нормально ли использовать reflection и вообще не использовать ^use[] отдельно?

2. Если ответ на вопрос из п.1 - да, то возникает второй вопрос: как при создании класса или вызова его метода работать с относительным путем класса?
Пример: есть папка с "компонентом", который должен работать в любом месте.
/lib/lib1 - класс, где определен метод создания класса через reflection 
/test/type1/class1 - класс, в котором надо создать class2 по относительному пути
/test/type2/class2
Если использовать reflection, то получается, что в lib1 передается относительный путь к class2, но относительно class1, а lib1 рассматривает этот путь относительно себя.

Использование полного пути к классу class1 выдает ошибку: usage failed - no $MAIN:CLASS_PATH were specified
^use[^file:dirname[^reflection:filename[$self]]/../type2/class2.p]
Можно из полного пути к class1 вырезать путь к корню веб-пространства, но в теории должен быть более простой способ.