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.