for Enum in Arr do
Writeln(ord(Enum));
Hier Arr
ist ein Array, und so die Elemente des Arrays werden ausgegeben, um. Die documentation sagt:
das Array in ansteigender Reihenfolge durchquert wird.
Daher wird 2
vor 0
ausgegeben.
for Enum in [enum3, enum1] do
Writeln(ord(Enum));
Hier [enum3, enum1]
ist ein Satz und der Enumerator für einen Satz geschieht in der Reihenfolge zunehmender Ordnungswert aufzuzählen. Also hat die Ausgabe zuerst 0
.
Ich glaube nicht, dass irgendwo in der Dokumentation angegeben ist, dass Mengen in dieser Reihenfolge aufgelistet sind, aber empirisch scheint das der Fall zu sein. Da die Mengen jedoch ungeordnet sind, sollte man sich nicht auf ihre Aufzählungsreihenfolge verlassen.
Also die Frage ist dann zu verstehen, wie [...]
ein Satz sein kann oder ein Array an verschiedenen Stellen im Code. Dies alles stammt aus der neuen dynamischen Syntax des XE7-Arrays, die (eine weitere) syntaktische Mehrdeutigkeit einführt. Wenn wir
Arr := [enum3, enum1];
schreiben dann ist [enum3, enum1]
ein Array. Der Compiler weiß, dass Arr
ein Array ist und diese Information den Typ des Literals definiert.
Aber wenn wir
for Enum in [enum3, enum1] do
schreiben dann ist [enum3, enum1]
ein Satz. Hier könnte das Literal im Prinzip entweder Array oder Set sein. In solchen Situationen glaube ich, dass der Compiler Sätze immer bevorzugen wird.
Wieder kann ich keine Dokumentation finden, die besagt, dass dies so ist, aber empirisch ist dies der Fall. Vermutlich da die gesetzten Enumeratoren die neue dynamische Array-Syntax vordatieren, haben sie Vorrang, wenn eine Mehrdeutigkeit vorliegt.
Die Bedeutung eines Literals der Form [...]
hängt von seinem Kontext ab.
Im Allgemeinen, bis die neue Syntax für dynarrays um kam (XE7 oder 8?), '[]' War immer ein Satz. Erst nachdem der neue Synatx eingeführt wurde, konnten Dynarrays mit '[]' Syntax initialisiert werden. In der Tat, Arr ist ein Array (was sonst?), Während das allgemeine wörtliche '[...]' hat immer eine Menge bezeichnet, da die guten alten Pascal Tage.So gibt es nichts Seltsames daran, IMO. Aufzählungszeichen haben nicht notwendigerweise eine spezielle Reihenfolge, aber IIRC wurde irgendwo erwähnt, dass Mengen in zunehmender Ordnungszahl aufgezählt werden. –
@Rudy Können Sie eine Dokumentationsverknüpfung für Sets bereitstellen, die in aufsteigender Ordnung aufgelistet werden? –
@Rudy Wie für * literal '[...]' hat immer eine Menge * bezeichnet, nun, das ist nicht mehr wahr. Es scheint eine Menge zu sein, außer es ist ein Array. Es hängt vom Kontext ab. Ich kann keine Dokumentation dafür finden. Es wäre großartig, wenn du es ausgraben könntest. –