Przeskocz do zawartości głównej

Rozszerzenie przez znak dolara przy użyciu parametrów

W rozszerzeniach przez znak dolara mogą być używane parametry. Umożliwia to dynamiczną ocenę zmiennej.

Zmienna utworzona do wykorzystania w rozszerzeniu musi zawierać parametry formalne. Parametr formalny jest symbolem zastępczym dla danych wejściowych do oceny i jest zapisywany ze znakiem dolara: $1, $2, $3. Liczba wskazuje numer parametru.

W przypadku używania zmiennej parametry rzeczywiste powinny być określone na liście rozdzielanej przecinkami.

Przykłady: Parametry w rozszerzeniach przez znak dolara

Jeśli chcesz zdefiniować mnożenie dwóch liczb, możesz napisać:

Set MUL= $1*$2 ;

Definiuje to, że $1 i $2 powinny zostać przez siebie pomnożone. Podczas używania tej zmiennej musi ona zostać rozszerzona przez znak dolara przy użyciu wartości $1 i $2 wstawionych do wyrażenia:

Set X= $( MUL(3,7) ) ;

Wartości (3 i 7) to parametry rzeczywiste, które zastępują $1 i $2 w rozszerzeniu. Rozszerzenia dokonuje się przed analizą składni i wykonaniem wyrażenia Set, co oznacza, że parser skryptu otrzymuje:

Set X= 3*7 ;

W efekcie do zmiennej X zostanie przypisana wartość ciągu: 3*7.

Jeśli użyjesz Let zamiast instrukcji Set:

Let X= $( MUL(3,7) ) ;

Parser otrzyma:

Let X= 3*7 ;

Tutaj dokonana zostanie ocena, a X otrzyma wartość liczbową 21.

Liczba parametrów

Jeśli liczba parametrów formalnych przekracza liczbę parametrów rzeczywistych, zostaną rozszerzone tylko parametry formalne odpowiadające parametrom rzeczywistym. Jeśli liczba parametrów rzeczywistych przekracza liczbę parametrów formalnych, wówczas nadmiarowe parametry rzeczywiste będą ignorowane.

Przykłady: Parametry formalne a parametry rzeczywiste

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

Parametr $0

Parametr $0 zwraca liczbę parametrów, które zostały rzeczywiście przekazane przez wywołanie.

Przykład: Jak wprowadzić obsługę błędów

Set MUL= If($0=2, $1*$2, 'Error') ;

Dowiedz się więcej