Расширение со знаком доллара с использованием параметров
В расширениях со знаком доллара могут использоваться параметры. Это делает возможным динамическое вычисление переменной.
Переменная, созданная для использования в расширении, должна содержать формальные параметры. Формальный параметр — это заполнитель для ввода данных для вычисления, он записывается со знаком доллара: $1, $2, $3. Число указывает на номер параметра.
При использовании переменной фактические параметры должны указываться в списке, разделенном запятой.
Примеры: Параметры в расширениях со знаком доллара
Если необходимо определить умножение между двумя числами, можно написать:
Set MUL= $1*$2 ;
Это определяет, что $1 нужно умножить на $2. При использовании эта переменная должна быть расширена знаком доллара со значениями для $1 и $2, вставленными в выражение:
Set X= $( MUL(3,7) ) ;
Значения (3 и 7) — это фактические параметры, которые заменяют $1 и $2 в расширении. Расширение выполняется до разбора и выполнения оператора Set, что означает, что средство синтаксического анализа скрипта видит следующее:
Set X= 3*7 ;
В результате переменной X будет присвоено строковое значение: 3*7.
Если использовать Let вместо оператора Set:
Let X= $( MUL(3,7) ) ;
Средство синтаксического анализа увидит следующее:
Let X= 3*7 ;
Здесь будет производиться вычисление, и X будет присвоено числовое значение 21.
Количество параметров
Если число формальных параметров превышает число действительных параметров, будут расширены только те формальные параметры, которые соответствуют действительным параметрам. Если число действительных параметров превышает число формальных параметров, излишние действительные параметры будут проигнорированы.
Примеры: Формальные параметры в сравнении с действительными параметрами
Set MUL= '$1*$2' ;
Set X= $(MUL) ; // returns $1*$2 in X
Set X= $(MUL(10)) ; // returns 10*$2 in X
Let X= $(MUL(5,7,8)) ; // returns 35 in X
Параметр $0
Параметр $0 возвращает число параметров, фактически переданных с помощью вызова.
Пример: Внедрение обработки ошибок
Set MUL= If($0=2, $1*$2, 'Error') ;