Buscar..


Sintaxis

  • identificador abstracto ( tipo de subrayado ) {...}
  • identificador abstracto ( tipo subyacente ) de typeA from typeB ... to typeA to typeB {...}

Observaciones

Un tipo abstracto es un tipo de tiempo de compilación que se resuelve al tipo subyacente en tiempo de ejecución . Esto significa que su tipo abstracto no existe en el código fuente generado por el compilador Haxe. En su lugar se colocan el tipo subyacente o los tipos definidos para la conversión implícita.

Los resúmenes se indican mediante la palabra clave abstract , seguida de un identificador y el tipo subyacente entre paréntesis.

Los resúmenes solo pueden definir campos de método y campos de propiedad no físicos. Los campos de método no incluidos se declaran como funciones estáticas en una clase de implementación privada, aceptando como un primer argumento adicional el tipo subyacente del resumen.

Tenga en cuenta que la sobrecarga del operador solo es posible para los tipos abstractos.

Resúmenes para la validación de datos.

El siguiente resumen define un EmailAddress tipo basado en la String tipo que va a utilizar una expresión regular para validar el argumento pasado como una dirección de correo electrónico. Si la dirección no es válida, se lanzará una excepción.

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

Utilice el resumen de la siguiente manera.

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

Pruebe el ejemplo en try.haxe.org .

Referencias

Sobrecarga del operador

La sobrecarga del operador solo es posible con tipos abstractos.

El siguiente resumen define un tipo Vec2i basado en el tipo Array<Int> . Este es un vector de dos componentes con valores enteros. La sobrecarga del operador es posible en los metadatos del compilador @:op . Solo se pueden sobrecargar los operadores numéricos disponibles; no se permite especificar operadores personalizados.

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

Utilice el resumen de la siguiente manera.

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

Pruebe el ejemplo en try.haxe.org .

Referencias



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow