Ist bekannt und dokumentiert.
hatte hier
viewtopic.php?f=26&t=78169&p=759328#p759328
erst vor kurzem nen Beitrag geschrieben wo auch ein Hinweis drin war das es nicht nur die 'übliche' verwendung von foreach wo ein string als 1. Parameter gebraucht gibt.
...
Ist der 2. Parameter vom Typ integer, dann muss der 1. Parameter lEnum nicht zwingend vom Typ string sein.
Die Verwendung des 1. Parameter lEnum als integer ist dort sinnvoll, da der Typ durch die foreach-Anweisung auf integer gewandelt wird.
Ist die Zahl negativ oder 0, dann wird die Schleife nicht durchlaufen, jedoch lEnum auf 1 gesetzt.
Die Schleifendurchläufe entsprechen dem Wert der Zahl, jedoch wird der Wert von lEnum fälschlicherweise um 1 weitergezählt.
Auch ein eingebrachtes break verhindert die Hochzählung nicht.
Ausserdem kann es unter speziellen Umständen dazu kommen, daß die Schleife bis zum Abbruch (normal 500000 Durchläufe) ausgeführt wird.
Dieses Phänomen tritt bei der Verwendung eines Integer-Wertes als 2. Parameter verstärkt nach der "Reparatur" der foreach-Anweisung in der
ReGaHss-Version R1.00.0388.0227 (Oct 20 2021) auf. Es sind hierzu leider noch nicht alle Tests abgeschlossen.
Für weitere Hinweise hierzu siehe Kartenreiter "Bugs" unter "Anweisungen" -> "foreach".
...
Code: Alles auswählen
WriteLine("Start");
integer lEnum;
integer lParam2 = 10;
WriteLine('--------------');
foreach(lEnum,lParam2)
{
WriteLine("> " # lEnum.Type() # " " # lEnum);
if(lEnum == lParam2)
{
WriteLine("break");
break;
}
}
WriteLine('--------------');
WriteLine("lParam2: " # lParam2.Type() # " " # lParam2);
WriteLine("lEnum: " # lEnum.Type() # " " # lEnum);
WriteLine("Ende");
Thomas