Zoeken…


Syntaxis

  • abstract ID ( underyling type ) {...}
  • abstract identifier ( onderliggend type ) van typeA van typeB ... tot typeA tot typeB {...}

Opmerkingen

Een abstract type is een compileertype dat tijdens runtime wordt omgezet in het onderliggende type . Dit betekent dat het abstracte type niet bestaat in de broncode die is gegenereerd door de Haxe-compiler. In plaats daarvan worden het onderliggende type of de typen die zijn gedefinieerd voor impliciete casting geplaatst.

Samenvattingen worden aangegeven door het abstract trefwoord, gevolgd door een ID en het onderliggende type tussen haakjes.

Samenvattingen mogen alleen methodevelden en niet-fysieke eigenschapsvelden definiëren. Niet-ingelijnde methodevelden worden gedeclareerd als statische functies in een privé- implementatieklasse , waarbij als een extra eerste argument het onderliggende type van de samenvatting wordt geaccepteerd.

Merk op dat operatoroverbelasting alleen mogelijk is voor abstracte types.

Samenvattingen voor gegevensvalidatie

De volgende samenvatting definieert een EmailAddress type op basis van het String type dat een reguliere expressie gebruikt om het doorgegeven argument te valideren als een e-mailadres. Als het adres niet geldig is, wordt een uitzondering gegenereerd.

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();
  }
}

Gebruik de samenvatting als volgt.

var emailGood = new EmailAddress("[email protected]");
var emailBad = new EmailAddress("john.doe.com");

Probeer het voorbeeld op try.haxe.org .

Referenties

Overbelasting van de operator

Overbelasting van de operator is alleen mogelijk met abstracte typen.

De volgende samenvatting definieert een Vec2i type op basis van het type Array<Int> . Dit is een tweecomponentenvector met gehele waarden. Overbelasting van de operator wordt mogelijk gemaakt door de metagegevens van de @:op compiler . Alleen de beschikbare numerieke operatoren kunnen worden overbelast - aangepaste operatoren mogen niet worden opgegeven.

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()
        );
    }
}

Gebruik de samenvatting als volgt.

var v1 = new Vec2i(1, 2);
var v2 = new Vec2i(3, 4);
v1 + v2;
v1.add(v2);

Probeer het voorbeeld op try.haxe.org .

Referenties



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow