12.6 Variable Anzahl von Argumenten (...)

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.


Navigation zeigen