Local Variablen

  • Hy, ich bin gerad etwas verwirrt.
    wenn ich eine Funktion aufrufe und diese beendet ist werden damit auch alle locals gelöscht.
    Kann ich den destruktor der Funktion übergehen?

    Ich möchte das alle locals einer Funktion bis zum Ende des Programms erhalten bleiben

    um das mal etwas anschaulicher zu machen


    Hier müsste nun 1 - 2 -3 rauskommen. Aber der Wert der Variable wird mit dem Endfunc wieder aufgehoben bzw die variable selber wird gelöscht.
    Wäre coole wenn da einer eine Lösung kennt.
    Und ja man kann das mit globals machen und nein das würde ich gern vermeiden

    Mfg

  • Exakt dafür gibt es Static:

    [autoit]

    ConsoleWrite(test() & @CRLF)
    ConsoleWrite(test() & @CRLF)
    ConsoleWrite(test() & @CRLF)

    [/autoit][autoit][/autoit][autoit]

    Func test()
    Local Static $anzahl = 0
    $anzahl += 1
    Return $anzahl
    EndFunc ;==>test

    [/autoit]


    Btw: Du solltest eine Variable explizit als "local" definieren.
    Machst du es, wie hier, nicht, ist es als würde man Dim $anzahl schreiben.
    Und dann wird es ganz eklig.
    Gibt es ein globales $anzahl wird darauf verwiesen ansonsten eine neue lokale Variable erstellt.
    Zur Verdeutlichung mal eine kleine Änderung deines Skriptes

    Spoiler anzeigen
    [autoit]

    $anzahl = 0

    [/autoit] [autoit][/autoit] [autoit]

    Func test()
    If Not (IsDeclared("anzahl")) Then
    ConsoleWrite(@CRLF & "var initalisiert" & @CRLF)
    $anzahl = 0
    EndIf
    $anzahl = $anzahl + 1
    Return $anzahl
    EndFunc ;==>test

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite(test())

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite(test())

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite(test())

    [/autoit]