Post by gregster » 07 May 2019, 17:12
Ich versteh das so:
Du deklarierst
Match1 in der Funktion als
lokal - jetzt kann in der Funktion eine andere Match1-Variable existieren als außerhalb, während fortan alle anderen Variablen in der Funktion als global angesehen werden (u. a.
Heuhaufen, aber auch
Match). Jetzt steht aber auch in den
RegExMatch-Doks (siehe Abschnitt
OutputVar):
Das heisst, da nun
Match global ist, wird das durch
RegExMatch erzeugte Match1 in der Pseudo-Array die globale Version von Match1, während Match1 in
MsgBox,, innerhalb Muster(), % "Match1: " Match1 weiterhin die lokal definierte Version der Variable ist - immer noch leer.
Also kein Bug, würd ich sagen, sondern dok-konformes Verhalten (ergo Feature
).
Setze das lokale Match1 zur Verdeutlichung:
Code: Select all
Heuhaufen := "abcXYZ123"
Muster()
MsgBox,, außerhalb Muster(), % "Match1: " Match1
Return
Muster()
{
Local Match1
RegExMatch(Heuhaufen, "abc(.*)123", Match)
Match1 := "lokal"
MsgBox,, innerhalb Muster(), % "Match1: " Match1
}
Ich versteh das so:
Du deklarierst [c]Match1[/c] in der Funktion als [c]lokal[/c] - jetzt kann in der Funktion eine andere Match1-Variable existieren als außerhalb, während fortan alle anderen Variablen in der Funktion als global angesehen werden (u. a. [c]Heuhaufen[/c], aber auch [c]Match[/c]). Jetzt steht aber auch in den [docs]RegExMatch[/docs]-Doks (siehe Abschnitt [i]OutputVar[/i]):
[quote="https://autohotkey.com/docs/commands/RegExMatch.htm#Parameters"]Within a function, to create a pseudo-array that is global instead of local, declare the base name of the pseudo-array (e.g. Match) as a global variable prior to using it.[/quote]
Das heisst, da nun [c]Match[/c] global ist, wird das durch [docs]RegExMatch[/docs] erzeugte Match1 in der Pseudo-Array die globale Version von Match1, während Match1 in [c]MsgBox,, innerhalb Muster(), % "Match1: " Match1[/c] weiterhin die lokal definierte Version der Variable ist - immer noch leer.
Also kein Bug, würd ich sagen, sondern dok-konformes Verhalten (ergo Feature ;) ).
Setze das lokale Match1 zur Verdeutlichung:
[code]Heuhaufen := "abcXYZ123"
Muster()
MsgBox,, außerhalb Muster(), % "Match1: " Match1
Return
Muster()
{
Local Match1
RegExMatch(Heuhaufen, "abc(.*)123", Match)
Match1 := "lokal"
MsgBox,, innerhalb Muster(), % "Match1: " Match1
}[/code]