Wenn Ihre Funktion einen oder mehrere Werte zurückgibt, ist es erforderlich, diese Werte in Klammern zu setzten, weil sonst der Parser sie als separate Anweisungen behandeln würde. Betrachten Sie den folgenden Code:
; falscher Code Function p_Max(a, b) If a > b Then Return a Return b EndFunction |
Der Hollywood-Parser würde diesen Code wie folgt interpretieren:
Function p_Max(a, b) If a > b Then Return ; Wenn a > b, dann gib keinen Wert zurück a ; führt Funktion a() aus !! Return ; gibt keinen Wert zurück !! b ; führt Funktion b() aus !! EndFunction |
Sie sehen, dass dies nicht viel Sinn macht. Die Klammern sind
obligatorisch, weil in Hollywood können Sie beliebig viele
Befehle in einer Zeile ohne Trennzeichen eingeben. Und Hollywood
ermöglicht es Ihnen, Funktionen aufzurufen, die Argumente ohne
Klammern nicht akzeptieren. Daher wird eine Anweisung wie Return a
in zwei Anweisungen umgewandelt, nämlich Return und ein
a()
. Wenn Sie die Variable a
zurückgeben wollen, müssen
Sie Return(a)
schreiben. Die richtige Version unserer Funktion
p_max()
hat also wie folgt auszusehen:
Function p_Max(a, b) If a > b Then Return(a) Return(b) EndFunction |
Durch die Verwendung der Klammern signalisieren Sie Hollywood,
dass die Variablen a
und b
zum Befehl Return() gehören und
nicht zwei getrennte Funktionen sind.
Wenn eine Funktion mehr als einen Wert zurückgibt, aber Sie wollen nur den ersten Rückgabewert haben, müssen Sie rund um den Funktionsaufruf ein Paar runde Klammern setzen. Dadurch wird das Ergebnis dieser Funktion auf einen einzigen Wert reduziert. Zum Beispiel gibt die folgende Funktion drei Werte zurück:
Function p_ThreeVals() Return(1, 2, 3) EndFunction |
Wenn Sie diese Funktion nun als Argument an einen Befehl anhängen, die eine mehrfache Anzahl von Argumenten akzeptiert, z.B. DebugPrint(), dann werden alle drei Rückgabewerte an DebugPrint() weitergegeben:
DebugPrint(p_ThreeVals()) ; gibt "1 2 3" aus |
Wenn Sie wollen, dass DebugPrint() nur den ersten Rückgabewert
von p_ThreeVals()
erhält, müssen Sie Klammern um die Funktion
p_ThreeVals()
setzten, so dass es wie folgt aussieht:
DebugPrint((p_ThreeVals())) ; gibt "1" aus |
Funktionen können nicht nur Zahlen zurückgeben, sondern auch Zeichenketten, Tabellen und sogar andere Funktionen. Zum Beispiel ist der folgende Code völlig legal:
Function p_Return_a_Table() Return({1, 2, 3, 4, 5}) EndFunction a = p_Return_a_Table() DebugPrint(a[3]) ; gibt 4 aus |
In der Praxis werden Sie wahrscheinlich diese Funktion nicht sehr viel verwenden. Aber Sie sollten wissen, dass es zumindest möglich ist, Funktionen zu haben, die Tabellen oder andere Funktionen zurückgeben können. Ein anderes Beispiel:
Function p_Return_Func() Return(Function(s) DebugPrint(s) EndFunction) EndFunction myfunc = p_Return_Func() myfunc("Hello World!") ; führt DebugPrint("Hello World!") aus |