haxe
Streszczenia
Szukaj…
Składnia
- abstrakcyjny identyfikator ( typ underyling ) {...}
- streszczenie identyfikator (typu bazowego) z TypeA od TypeB ... do TypeA do TypeB {...}
Uwagi
Typ abstrakcyjny to typ czasu kompilacji, który jest tłumaczony na typ podstawowy w czasie wykonywania . Oznacza to, że ten typ abstrakcyjny nie istnieje w kodzie źródłowym generowanym przez kompilator Haxe. Zamiast tego umieszczany jest typ bazowy lub typy zdefiniowane dla niejawnego rzutowania.
Abstrakty są oznaczone słowem kluczowym abstract , po którym następuje identyfikator i typ w nawiasach.
Streszczenia mogą definiować tylko pola metod i pola właściwości niefizycznych. Nie-wstawiane pola metod są deklarowane jako funkcje statyczne w prywatnej klasie implementacji , przyjmując jako dodatkowy pierwszy argument podstawowy typ abstraktu.
Pamiętaj, że przeciążenie operatora jest możliwe tylko dla typów abstrakcyjnych.
Streszczenia w celu weryfikacji danych
Poniższe streszczenie definiuje EmailAddress typu oparte na String typu, który będzie używać wyrażenia regularnego sprawdzania poprawności przekazany argument jako adres e-mail. Jeśli adres jest nieprawidłowy, zostanie zgłoszony wyjątek.
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();
}
}
Użyj streszczenia w następujący sposób.
var emailGood = new EmailAddress("[email protected]");
var emailBad = new EmailAddress("john.doe.com");
Wypróbuj przykład na try.haxe.org .
Bibliografia
Przeciążenie operatora
Przeciążenie operatora jest możliwe tylko w przypadku typów abstrakcyjnych.
Poniższy abstrakt definiuje typ Vec2i oparciu o typ Array<Int> . Jest to wektor dwuskładnikowy o wartościach całkowitych. Przeciążenie operatora jest możliwe w moich metadanych kompilatora @:op . Przeciążone mogą być tylko dostępne operatory numeryczne - nie można określić operatorów niestandardowych.
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()
);
}
}
Użyj streszczenia w następujący sposób.
var v1 = new Vec2i(1, 2);
var v2 = new Vec2i(3, 4);
v1 + v2;
v1.add(v2);
Wypróbuj przykład na try.haxe.org .