У меня есть модуль библиотеки XQuery, содержащий некоторые функции, которые не принимают аргументов. Я рассматриваю возможность перезаписи этих функций как переменных, чтобы сделать их немного быстрее, чтобы получить к ним доступ.XQuery: лениво ли оцениваются импортируемые переменные?
Однако некоторые из них представляют собой дорогостоящие вычисления с вычислением. Как функции, они, очевидно, будут оцениваться только при вызове. Но в качестве переменных я не уверен, будут ли они автоматически оцениваться при импорте библиотечного модуля.
Только некоторые запросы, которые импортируют этот модуль, будут использовать эти переменные и оправдать их оценку. Для других, которые не используют переменные, указанная оценка будет излишней накладной.
Не было бы проблем, если бы импортируемые переменные оценивались лениво: я мог бы импортировать библиотечный модуль в любой запрос, зная, что эти дорогие переменные оцениваются только в том случае, если они фактически используются основным модулем.
Я знаю, что это всего лишь вопрос написания prefix:myImportedFunction()
против $prefix:myImportedVariable
, но это неопределенность, которую я хотел бы развеять.
Я считаю, что это поведение зависит от реализации. Меня особенно интересует поведение в BaseX и Saxon-HE. Они лениво оценивают импортируемые переменные?
не имел ни малейшего представления о 'lazy' аннотацию. Большой наконечник; и спасибо, что разделили его. Помимо этого, я бы просто хотел дважды проверить два ключевых слова, которые вы упомянули: «выполненный код». Если дорогая переменная ссылается на другую переменную в модуле _library_, но не в _main module_, тогда $ дорогое не будет предварительно оценено, так как оно не является частью исполняемого кода. Правильно? – ARX
На самом деле не важно, происходит ли переменная в основном или библиотечном модуле. Но он играет роль, если переменная упоминается где-то в коде, который может быть выполнен. Если он появляется в функции, которая никогда не будет вызвана, она не будет оценена действительно. - Помогает ли это? –
Он делает! Спасибо. – ARX