У меня есть модуль библиотеки XQuery, включающий некоторые функции, которые не принимают аргументов. Я рассматриваю возможность переписать эти функции как переменные, чтобы немного ускорить доступ к ним.
Однако содержание некоторых из них представляет собой вычислительно затратные выражения. Очевидно, что как функции они будут оцениваться только при вызове. Но как переменные, я не уверен, будут ли они автоматически оцениваться при импорте библиотечного модуля.
Только некоторые запросы, которые импортируют этот модуль, будут использовать эти переменные и оправдывать их оценку. Для других, которые не используют переменные, указанная оценка будет ненужной накладной стоимостью.
Однако не было бы проблем, если бы импортированные переменные оценивались лениво: я мог бы импортировать библиотечный модуль по любому запросу, зная, что эти дорогостоящие переменные оцениваются только в том случае, если они действительно используются основным модулем.
Я знаю, что это просто вопрос написания prefix:myImportedFunction()
против $prefix:myImportedVariable
, но это неуверенность, которую я хотел бы развеять.
Я считаю, что это поведение зависит от реализации. Меня особенно интересует поведение в BaseX и Saxon-HE. Они лениво оценивают импортированные переменные?