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.