Komisches Verhalten einer Variable, Anfängerfehler?

  • Hey,

    ich bin noch relativ neu bei AutoIt. Eigentlich kann ich mich in solche Dinge ja gut reinarbeiten. Gerade habe ich jedoch ein Problem, was mir jedoch merkwürdig erscheint, da ich es von anderen Sprachen anders her kenne. Wahrscheinlich ist es nur ein Anfängerfehler.

    Ich habe eine global definierte Variabel mit einem bestimmten Wert. Dann habe ich noch einen String, der diese Variable enthält. Diesen Wert gebe ich in einem Label aus. Durch eine Funktion ändert sich dieser Wert der Variabel. Wenn ich nun mit GUICtrlSetData den String, welcher die Variable enthält, erneut in dem Label ausgebe, wird der alte Wert der Variable ausgegeben. Ich bin mir jedoch zu 100% sicher, dass sich der Wert der Variable verändert hat, da sie in einer anderen Funktion auch verwendet wird und dort den neuen Wert enthält.

    Hilfe, ich bin verwirrt?

    Simon

    Einmal editiert, zuletzt von Index (17. Februar 2014 um 18:54)

  • Bitte poste ein Beispielscript welches deinen Fehler zeigt.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • [autoit]

    $variable = "Wert 1"
    $string = "Die Variable enthält: " & $variable

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

    $form = GUICreate("GUI", 500, 500)
    $label = GUICtrlCreateLabel("", 10, 10, 490, 490)
    GUISetState(@SW_SHOW)

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

    SetLabelContent()

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

    Sleep(2000)

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

    ChangeVariable()
    SetLabelContent()

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

    While 1
    Sleep(1000)
    WEnd

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

    Func SetLabelContent()
    GUICtrlSetData($label, $string)
    EndFunc

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

    Func ChangeVariable()
    $variable = "Wert 2"
    MsgBox(Default, "", "Die Variabel wurde geändert.")
    EndFunc

    [/autoit]
  • Du änderst die Variable $variable aber nicht den $string den am Anfang bildest. Sprich es kann sich nichts ändern.

    Hier:

    Spoiler anzeigen
    [autoit]

    $variable = "Wert 1"
    $string = "Die Variable enthält: " & $variable

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

    $form = GUICreate("GUI", 500, 500)
    $label = GUICtrlCreateLabel("", 10, 10, 490, 490)
    GUISetState(@SW_SHOW)

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

    SetLabelContent()

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

    Sleep(2000)

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

    ChangeVariable()

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

    $string = "Die Variable enthält: " & $variable

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

    SetLabelContent()

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

    While 1
    Sleep(1000)
    WEnd

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

    Func SetLabelContent()
    GUICtrlSetData($label, $string)
    EndFunc

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

    Func ChangeVariable()
    $variable = "Wert 2"
    MsgBox(Default, "", "Die Variabel wurde geändert.")
    EndFunc

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Mal abgesehen davon, sollte man ja globale Variablen wenn möglich vermeiden. Siehe hier: https://autoit.de/index.php?page=Thread&postID=203773

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • Globale Variablen hin oder her, auf jeden Fall solltest du es dir angewöhnen deine Variablen ordentlich zu deklarieren (mit dem Global oder dem Local Keyword).

    Mal abgesehen davon, sollte man ja globale Variablen wenn möglich vermeiden. Siehe hier: https://autoit.de/index.php?page=Thread&postID=203773

    Hast du das "Schlusswort" auch gelesen?

  • Du änderst die Variable $variable aber nicht den $string den am Anfang bildest. Sprich es kann sich nichts ändern.

    Das kenne ich aber zum Beispiel von PHP her anders. Ist irgendwie blöd ^^

    Mal abgesehen davon, sollte man ja globale Variablen wenn möglich vermeiden. Siehe hier: https://autoit.de/index.php?page=Thread&postID=203773

    Das Skript ist nicht so groß, dass es Probleme geben sollte.

    Globale Variablen hin oder her, auf jeden Fall solltest du es dir angewöhnen deine Variablen ordentlich zu deklarieren (mit dem Global oder dem Local Keyword).

    Habe ich in meinem Skript, nur hier wegen Faulheit weggelassen ^^

  • Das kenne ich aber zum Beispiel von PHP her anders.

    Definitiv nicht.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    • Offizieller Beitrag

    Definitiv nicht.

    Definitiv nicht, richtig! Wenn überhaupt kennst du printf, gibts in AutoIt auch, heißt nur StringFormat.

    Spoiler anzeigen
    [autoit]

    $variable = "Wert 1"
    $string = "Die Variable enthält: %s"

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

    $form = GUICreate("GUI", 500, 500)
    $label = GUICtrlCreateLabel("", 10, 10, 490, 490)
    GUISetState(@SW_SHOW)

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

    SetLabelContent()

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

    Sleep(2000)

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

    ChangeVariable()
    SetLabelContent()

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

    While GUIGetMsg() <> -3
    ;~ Sleep(1000)
    WEnd

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

    Func SetLabelContent()
    GUICtrlSetData($label, StringFormat($string,$variable))
    EndFunc

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

    Func ChangeVariable()
    $variable = "Wert 2"
    MsgBox(Default, "", "Die Variabel wurde geändert.")
    EndFunc

    [/autoit]

    Oder du schaust dir mal die Option ExpandVarStrings in der Hilfe an, dann funktioniert das mit $variable$ im String, ist aber eher unsauber.

    Gruß,
    Spider

  • Sag ich ja lach.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.