Вызов встроенных функций
- Аргументы позиционные, и каждый обязателен. Ни одна встроенная функция не принимает необязательных, именованных аргументов или переменного их числа. Имена параметров в справочнике — только подписи.
- Число аргументов проверяется при компиляции скрипта, поэтому неверное число останавливает скрипт до того, как что-либо выполнится.
- Типы аргументов проверяются при выполнении вызова и должны совпадать точно, с одним
расширением. Integer на месте объявленного Real становится этим Real (
MathSqrt(16)работает), как и в арифметике. Real на месте объявленного Integer или число на месте объявленного Text (UtilityPrint(42)) останавливает действие с ошибкой Name: аргумент N имеет неверный тип. Параметры, показанные как Any, принимают любой тип. - Каждая встроенная функция возвращает значение. Большинство действий возвращают Bool со смыслом «получилось ли», который можно проигнорировать или проверить.
- Отсутствие чего-либо — обычный результат, а не ошибка. Ненайденное окно — это пустой
Window. Передача пустого Window или уже закрытого окна во встроенную функцию
Window*ничего не делает и возвращаетfalse,0или"", поэтому цепочка вызовов для ненайденного дескриптора безопасна. Встроенные функции контекста вне своего триггера возвращают"",0,-1или пустой Window. - Множественные результаты: сначала перечисление, затем обращение по индексу. Вызов вроде
WindowGetAllTopLevel(),FolderEnumerateAll(…),StringSplit(…)илиDisplayMonitorEnumeratedAll()возвращает количество, а парная…EnumeratedAt(i)/…PartAt(i)читает элементi, от0до количества − 1. У каждого семейства один кэш на запуск скрипта, и следующий вызов перечисления того же семейства заменяет его. - Плагин может добавлять собственные встроенные функции. Их вызовы выглядят так же. Если плагин не подключён в момент компиляции скрипта, скрипт не запускается, и уведомление сообщает причину.
n = WindowGetAllTopLevel(); // количество; заполняет кэш окон
for (i = 0; i < n; i = i + 1) {
w = WindowGetEnumeratedAt(i); // элемент i из этого кэша
if (WindowGetVisible(w) && WindowGetTitle(w)) {
UtilityPrint(WindowGetExecutableName(w) + " - " + WindowGetTitle(w));
}
}