to

Der to-Operator beschreibt ein gewünschtes Casting, wenn dies erforderlich ist oder dient zur Dokumentation.

to erlaubt eine explizite Umwandlung, auch wenn diese Rechenzeit kostet. Siehe auch as, welcher lediglich als Getter fungiert. (Siehe unten)

Point contains int x, y;
Startpoint as Point;
Endpoint as Point;
Color as int;

Segment contains 
  Color = (#FFFFFF), // Default Value
  Startpoint, 
  Endpont;

color is Color(#FFFF00);         // Hash leitet Hexadezimalzahl ein
p1 is Point( 0, 0 );
p2 is Point( 10, 0 );
start is Startpoint( p1 );
end is Endpoint(p2);

seg is Segment( color, p1, p2 ); // ok, Ambivalenzhinweis (p1 und p2 könnten verwechselt sein)

seg1 is Segment( color, p1 to Startpoint, p2 to Endpoint ); // ok -> Dokumentation
seg2 is Segment( p1, p2 ); // fail: Unbekannte Reihenfolge
seg3 is Segment( p1 to Startpoint, p2 to Endpoint ); // ok, Color erhält default value
seg4 is Segment( p2 to Endpoint, p1 to Startpoint ); // ok, Color erhält default value
seg5 is Segment( start, p2 );  // ok, p2 muss Endpoint sein
seg6 is Segment( p2, start );  // ok, Ambivalenzwarnung (nicht hint!)
seg7 is Segment( p2 to Endpoint, start );  // ok
seg8 is Segment( start, end ); // ok
seg9 is Segment( end, start ); // ok -> Klare Typzuordnung
seg0 is Segment( end to Startpoint, start to Endpoint ); // gewünschtes Casting: end ist ein Point, Startpoint besitzt einen expliziten Point-Konstruktor

Siehe auch: as

to als Konvertierung

Ziel ist es einen Datentyp in einen anderen zu überführen. Im Idealfall ist der Zieldatensatz bereits vorhanden, in dem Fall funktioniert to wie ein Getter. Hierfür sollte as implementiert werden. Existiert keine to-Implementiertung, so greift der Compiler auf eine vorhandene as Implementierung zurück.

Beispiel:

Loop3d contains
{
  points is vector< Point3d >;
}

SegLoop3d contains
{
  points is vector< SegPoint3d >;
  
  Loop3d :=
  {
    result is vector< Point3d >;
    
    for( points )
      result.push( value );
      
    return Loop3d( result );
  }
}