Hi,
ich hatte heute ein ziemlich seltsamen Fehler, den ich recht lange suchen musste.
Der "Ausdruck" für den Index bei einem Array (nur bei der Werte zuweisung) scheint doppelt ausgeführt zu werden.
#include<Array.au3>
Global $aArray[10]
Global $oStack = ObjCreate("System.Collections.Stack")
$oStack.Push(0)
$oStack.Push(1)
$oStack.Push(2)
$aArray[$oStack.Pop()] = "test"
;( .Pop gibt den zuletzt gespeicherten Wert aus, dieser wird dann gelöscht und es kann auf den nächsten wert zugegriffen werden. Siehe https://autoit.de/index.php?thread/3407-alternativen-zum-array/)
_ArrayDisplay($aArray)
Hier würde ich jetzt erwarten, dass Index 2 den String "Test" enthält.
Dieser befindet sich aber in Index 1!
Hier nochmal eine Varriante bei der die doppelte Ausführung etwas auffälliger ist:
#include<Array.au3>
Global $aArray[10], $var
$aArray[MsgBox(0,"Zuweisung", "Hi, ich erscheine zweimal.")] = Null
$var = $aArray[MsgBox(0,"Abruf", "Ich hingegen nur einmal ;(")]
Die Zweite Msgbox ist in keiner Zuweisung, sie wird nur einmal ausgeführt.
Da die doppelte Ausführung normalerweise folgenlos bleibt,( z.b. bei einer Varriable oder einer Zahl) ist es nicht sichtbar.
Relevant wird es nur wenn man Funktionen (z.B. Random in kombination mit SRandom oder .Pop usw.) direkt einsetzt.
Natürlich ist das einfach zu umgehen, denoch finde ich das recht kurios.
@AutoItVersion: 3.3.14.2
@OSVersion: WIN_10
[Edit]
Ticket wurde abgelehnt, vor 3 Jahren ist wohl schon jemand über das Problem gestolpert und hatte ein Ticket erstellt.
https://www.autoitscript.com/trac/autoit/ticket/3003
mfg
Zeitriss