haxe
Zusammenfassungen
Suche…
Syntax
- abstrakter Bezeichner ( Underyling-Typ ) {...}
- abstrakter Bezeichner ( zugrunde liegender Typ ) von Typ A von Typ B ... bis Typ A bis TypB {...}
Bemerkungen
Ein abstrakter Typ ist ein Kompilierungszeittyp , der zur Laufzeit in den zugrunde liegenden Typ aufgelöst wird . Das bedeutet, dass der abstrakte Typ nicht im vom Haxe-Compiler generierten Quellcode vorhanden ist. Anstelle dessen werden der zugrunde liegende Typ oder die für das implizite Casting definierten Typen platziert.
Zusammenfassungen werden durch das Schlüsselwort abstract , gefolgt von einem Bezeichner und dem zugrunde liegenden Typ in Klammern.
Abstracts können nur Methodenfelder und nicht-physische Eigenschaftsfelder definieren. Nicht eingebettete Methodenfelder werden in einer privaten Implementierungsklasse als statische Funktionen deklariert. Als zusätzliches erstes Argument wird der zugrunde liegende Typ der Zusammenfassung akzeptiert.
Beachten Sie, dass das Überladen von Operatoren nur für abstrakte Typen möglich ist.
Abstracts zur Datenvalidierung
Die folgende Zusammenfassung definiert einen EmailAddress Typ basierend auf dem String Typ, der einen regulären Ausdruck verwendet, um das übergebene Argument als E-Mail-Adresse zu EmailAddress . Wenn die Adresse nicht gültig ist, wird eine Ausnahme ausgelöst.
abstract EmailAddress(String) {
static var ereg = ~/^[\w-\.]{2,}@[\w-\.]{2,}\.[a-z]{2,6}$/i;
inline public function new(address:String) {
if (!ereg.match(address)) throw "EmailAddress "$address" is invalid";
this = address.toLowerCase();
}
}
Verwenden Sie die Zusammenfassung wie folgt.
var emailGood = new EmailAddress("[email protected]");
var emailBad = new EmailAddress("john.doe.com");
Versuchen Sie das Beispiel auf try.haxe.org .
Verweise
Überlastung des Bedieners
Überladen von Operatoren ist nur mit abstrakten Typen möglich.
In der folgenden Zusammenfassung wird ein Vec2i Typ definiert, der auf dem Typ Array<Int> basiert. Dies ist ein Zwei-Komponenten-Vektor mit ganzzahligen Werten. Das Überladen der Operatoren wird durch die Metadaten des @:op Compilers ermöglicht . Nur die verfügbaren numerischen Operatoren können überladen werden. Benutzerdefinierte Operatoren dürfen nicht angegeben werden.
abstract Vec2i(Array<Int>) {
public inline function getX() : Int {
return this[0];
}
public inline function getY() : Int {
return this[1];
}
public inline function new(x : Int, y : Int) {
this = [x, y];
}
@:op(A + B)
public inline function add(B : Vec2i) : Vec2i {
return new Vec2i(
getX() + B.getX(),
getY() + B.getY()
);
}
}
Verwenden Sie die Zusammenfassung wie folgt.
var v1 = new Vec2i(1, 2);
var v2 = new Vec2i(3, 4);
v1 + v2;
v1.add(v2);
Versuchen Sie das Beispiel auf try.haxe.org .