Expansiones de signo dólar con parámetros
Se pueden utilizar parámetros en las expansiones de signo dólar. Esto permite tener una evaluación dinámica de la variable.
La variable creada para su uso en la expansión debe contener parámetros formales. Un parámetro formal es un marcador de posición para la entrada a la evaluación y está escrito con un signo de dólar: $1, $2, $3. El número indica el número de parámetro.
Al usar la variable, los parámetros reales deben indicarse en una lista separada por comas.
Ejemplos: Parámetros en expansiones de signo dólar
Si desea definir una multiplicación entre dos números, puede escribir:
Set MUL= $1*$2 ;
Esto define que $1 y $2 deben multiplicarse entre sí. Cuando se usa, esta variable debe expandirse mediante signo dólar con valores para $1 y $2 e insertarse en la expresión:
Set X= $( MUL(3,7) ) ;
Los valores (3 y 7) son los parámetros reales que reemplazan a $1 y $2 en la expansión. La expansión se realiza antes de que se analice y ejecute la sentencia de Conjunto, lo que significa que el analizador de secuencias de comandos ve lo siguiente:
Set X= 3*7 ;
Como resultado, a la variable X se le asignará el valor de cadena: 3*7.
Si utiliza una sentencia Let en lugar de una sentencia Set:
Let X= $( MUL(3,7) ) ;
El analizador verá lo siguiente:
Let X= 3*7 ;
Aquí se hará una evaluación y a X se le asignará el valor numérico 21.
Número de parámetros
Si el número de parámetros formales supera al de parámetros reales únicamente se expandirán los parámetros formales que se correspondan con parámetros reales. Si el número de parámetros reales excede al de parámetros formales, se ignorarán los parámetros reales supérfluos.
Ejemplos: Parámetros formales versus parámetros reales
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
El parámetro $0
El parámetro $0 devuelve el número de parámetros realmente aprobados por una llamada.
Ejemplo: Cómo introducir el manejo de errores
Set MUL= If($0=2, $1*$2, 'Error') ;