Sie können auch Funktionen schreiben, die eine beliebige Anzahl
von Argumenten akzeptieren. Um dies zu tun, müssen Sie den
...-Bezeichner als letzten Parameter verwenden. Ihre Funktion
wird dann eine lokale Tabelle arg erhalten, die alle Parameter
enthält, die für Ihre Funktion einschließlich eines Elements
n übergeben wurden. n trägt die Anzahl von Parametern, die
an die Funktion weitergeleitet wurde. Bitte beachten Sie auch,
dass die Argumente in der Tabelle arg bei Index 0 beginnend
gespeichert werden. Als Beispiel ist hier eine Funktion, die
den Durchschnitt aller Parameter berechnet, die an sie übergeben
werden:
Function p_Average(...)
Local pars = arg.n ; wie viele Parameter wurden übergeben
Local avg, k ; temporäre lokale Variablen
For k = 1 To pars
avg = avg + arg[k-1] ; summiert alle Parameter
Next
Return(avg / pars) ; und teile die Summe durch ihre Menge
EndFunction
a = p_Average(10, 20, 30, 40, 50) ; (10 + 20 + 30 + 40 + 50) / 5 = 30
b = p_Average(34, 16, 27, 39) ; (34 + 16 + 27 + 39) / 4 = 29
c = p_Average(10, 10) ; (10 + 10) / 2 = 10
Print(a, b, c) ; gibt "30 29 10" aus
|
Es ist wichtig zu beachten, dass der ...-Bezeichner als letzten
Eintrag in Ihrer Parameterliste angegeben werden muss. Sie
können nicht Dinge tun, wie:
; falscher Code
Function p_Test(a, b, ..., c)
...
EndFunction
|
Dies funktioniert natürlich nicht, weil Hollywood nie wissen
kann, welcher Parameter zu c gehört. Verwendung von Parametern,
bevor der ...-Bezeichner steht, ist jedoch in Ordnung:
Function p_MinMax(ismin, ...)
Local pars = arg.n ; wie viele Parameter wurden übergeben
Local k
If ismin = True ; kleinstes Element herausfinden
Local min = arg[0] ; hier das kleinste Element speichern
For k = 2 To pars ; Durchlaufen aller Elemente
If arg[k-1] < min Then min = arg[k-1] ; kleiner?
Next
Return(min) ; und gibt das kleinste zurück
Else
Local max = arg[0] ; hier das grösste Element speichern
For k = 2 To pars ; Durchlaufen aller Elemente
If arg[k-1] > max Then max = arg[k-1] ; größer ?
Next
Return(max) ; und gibt das grösste Element zurück
EndIf
EndFunction
a = p_MinMax(True, 4, 8, 2, 3, 10, 1, 7, 9, 5, 6) ; gibt 1 zurück
b = p_MinMax(False, 4, 8, 2, 3, 10, 1, 7, 9, 5, 6) ; gibt 10 zurück
|
Diese Funktion gibt die kleinste Anzahl der angegebenen Parameter zurück, wenn das erste Argument TRUE oder die größte Zahl, wenn das erste Argument FALSE ist.
Wenn Sie alle Argumente einer anderen Funktion übergeben müssen, kann der Befehl Unpack() praktisch sein. Damit werden alle Elemente einer Tabelle zurückgegeben. Wenn Sie zum Beispiel Ihre eigene Print() Funktion schreiben möchten:
Function p_Print(...)
Print(Unpack(arg))
EndFunction
|
Alle übergebenen Argumente von p_PRINT() werden an Print()
mit Hilfe des Befehls Unpack() weiter gereicht.