haxe
Résumés
Recherche…
Syntaxe
- identifiant abstrait ( type underyling ) {...}
- identifiant abstrait ( type sous-jacent ) de typeA de typeB ... à typeA à typeB {...}
Remarques
Un type abstrait est un type à la compilation qui résout le type sous - jacent au moment de l' exécution . Cela signifie que le type abstrait n'existe pas dans le code source généré par le compilateur Haxe. Au lieu de cela sont placés le type sous-jacent, ou les types définis pour la diffusion implicite.
Les résumés sont désignés par le mot-clé abstract , suivi d'un identifiant et d'un type sous-jacent entre parenthèses.
Les résumés ne peuvent définir que des champs de méthodes et des champs de propriétés non physiques. Les champs de méthode non incorporés sont déclarés en tant que fonctions statiques dans une classe d'implémentation privée, acceptant comme premier argument supplémentaire le type sous-jacent de l'abrégé.
Notez que la surcharge d'opérateur n'est possible que pour les types abstraits.
Résumé pour la validation des données
Le résumé suivant définit un type EmailAddress basé sur le type String qui utilisera une expression régulière pour valider l'argument passé en tant qu'adresse de messagerie. Si l'adresse n'est pas valide, une exception sera lancée.
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();
}
}
Utilisez le résumé comme suit.
var emailGood = new EmailAddress("[email protected]");
var emailBad = new EmailAddress("john.doe.com");
Essayez l'exemple sur try.haxe.org .
Les références
Surcharge de l'opérateur
La surcharge d'opérateur n'est possible qu'avec les types abstraits.
Le résumé suivant définit un type Vec2i basé sur le type Array<Int> . Ceci est un vecteur à deux composants avec des valeurs entières. La surcharge de l'opérateur est rendue possible grâce aux métadonnées du compilateur @:op . Seuls les opérateurs numériques disponibles peuvent être surchargés - les opérateurs personnalisés ne peuvent pas être spécifiés.
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()
);
}
}
Utilisez le résumé comme suit.
var v1 = new Vec2i(1, 2);
var v2 = new Vec2i(3, 4);
v1 + v2;
v1.add(v2);
Essayez l'exemple sur try.haxe.org .