====== Reflection ======
reflects ist eine Klasse/Operator, die aus einem anderen Datentyp erzeugt werden kann.
r reflects int;
r reflektiert anschließend int. r kann den Datentyp beschreiben:
print r.sizeof(), "\n";
print r$, "\n";
print r.isPrimitiv(), "\n";
=>
4
int
true
Außerdem verfügt r über eine Liste der enthaltenen Member
print r.count(), "\n";
=>
0
----
Point contains x, y is double;
r reflects Point; // r is type : Point@;
print r.sizeof(), "\n";
print r[]#, "\n";
print r[0].sizeof(), "\n";
print r[0]$, "\n";
print r[0].isPrimitiv(), "\n";
print r[0].name(), "\n";
print r[0].position(), "\n";
print r[1].sizeof(), "\n";
print r[1]$, "\n";
print r[1].isPrimitiv(), "\n";
print r[1].name(), "\n";
print r[0].position(), "\n";
print r$, "\n";
print r.isPrimitiv(), "\n";
=>
8
2
4
int
true
x
0
4
int
true
y
4
Point
false
Eine derartige Datenstruktur kann mit der vTable kombiniert werden, so dass Objekte, die persistiert werden können, grundsätzlich "virtual" sind.
io-Klassen kann sich so durch die Typen hangeln und in Schleifen die Daten entsprechend abhandeln.