Hallo,
die Option
ByRef bezieht sich auf die
Funktionsparameter und kann nur in der Kopfzeile der Funktionsdeklaration angegeben werden:
Code: Select all
Test(ByRef S1, ByRef S2) ; <- nur hier
{
...
}
Sie bewirkt, dass nicht - wie ohne diese Angabe - eine funktionslokale Kopie der Variablen, sondern die Originalvariable (genauer gesagt: ihre Adresse) an die Funktion übergeben wird. Wenn eine
ByRef Variable innerhalb der Funktion geändert wird, wird damit auch die übergebene Originalvariable geändert. Die Änderung muss nicht mit
Return Var zurückgegeben werden.
Dein Beispiel "returniert" überhaupt nichts. Weil es die Anweisung
returnByRef nicht gibt, macht AHK daraus einfach einen Variabennamen. Die Zeile
returnByRef (R1 ,R2, R3) hängt per "auto-concat" (automatische Verkettung) den Wert des Ausdrucks
(R1, R2, R3) (in AHK 1.1 wäre das der Inhalt von R1) an die Variable
returnByRef an. Deine Funktion endet deshalb ohne
Return Anweisung, gibt also Nichts zurück.
Edit: Moin Holle!
Edit2: Ein Beispiel sagt manchmal mehr als tausend Worte:
Code: Select all
#NoEnv
R1 := 1
R2 := 1
MsgBox, 0, Vorher, R1 = %R1% - R2 = %R2%
ReturnWert := Test(R1, R2)
MsgBox, ReturnWert = %ReturnWert%
MsgBox, 0, Nachher, R1 = %R1% - R2 = %R2%
ExitApp
Test(ByRef S1, ByRef S2)
{
; hier die Operationen
S2 := 2 ; hier wird tatsächlich die übergebene Variable R2 verändert
Return "S2 wurde auf 2 gesetzt!"
}