Funktion optionaler Parameter

  • Hi,

    musste mich jetzt auch mal anmelden (bin stiller leser), weil ich dieses nicht verstehe:

    Wieso ist die "if bedingung" erfüllt, wenn ich "test" ohne parameter starte ? Denn die msgbox geht auf, obwohl $opt = 0 ist.
    Meiner meinung nach ist 0 ungleich dem wort "start". ;)

    Freue mich über jede Erklärung...

    [autoit]

    test()

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

    Func test($opt=0)
    If $opt = "start" Then
    MsgBox(0,"",$opt)
    EndIf
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von dudial (2. Mai 2013 um 12:38)

  • Das könnte man schon fast als Bug ansehen, keine Ahnung was die Dev's davon halten. Könntest ja mal einen Bug-Report machen.
    Auf alle Fälle wird die optionale Zuweisung als Bool angesehen und dann funktioniert der Vergleich nicht mehr.

    Hier die Lösung: Wenn der Parameter einen String enthalten soll, dann einen Leerstring zuweisen.

    Spoiler anzeigen
    [autoit]

    test()
    test2()

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

    Func test($opt = 0)
    If $opt = "start" Then
    MsgBox(0, "", $opt)
    EndIf
    EndFunc ;==>test

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

    Func test2($opt = "")
    If $opt = "start" Then
    MsgBox(0, "", $opt)
    EndIf
    EndFunc ;==>test2

    [/autoit]


    Edit: Hier die korrekte Antwort von einen Profi im englische Forum: http://www.autoitscript.com/forum/topic/15…t/#entry1074660

    Die automatische Typenumwandlung von AutoIt wandelt den String in eine Zahl um, und dabei kommt 0 heraus. Wenn nun 0 gleich 0, dann TRUE.

  • Ich denke das wird daran liegen, dass AutoIt den Datentyp selbst erkennt sofern eine Variable nicht initialisiert wird.

    Somit versuchst du eine Integervariable mit einem String zu vergleichen ...

    Grüße

    Grüße Yaerox

    Grüne Hölle

  • Danke, wieder etwas dazugelernt...


    hier noch eine funktionierende variante. vergleich mit "=="

    [autoit]


    test()

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

    Func test($opt=0)
    If $opt == "start" Then
    MsgBox(0,"",$opt)
    EndIf
    EndFunc

    [/autoit]