サーチ…


構文

  • 抽象識別子基底型 ){...}
  • typeBからtypeAまでの抽象的な識別子基本型 )... typeAからtypeBまで {...}

備考

抽象型は、 コンパイル時の型であり、 実行時に 基底の型に解決されます 。これは、抽象型 Haxeコンパイラによって生成されたソースコードに存在しないことを意味します。その代わりに、潜在的な型、または暗黙のキャストのために定義された型が置かれます。

要約は、 abstractキーワードで表され、その後に識別子があり、基になる型は括弧で囲まれています。

要約は、メソッドフィールドと非物理的プロパティフィールドのみを定義することができる。非インラインメソッドフィールドは、プライベート実装クラスで静的関数として宣言され、抽象的な抽象メソッドの基礎となる型を追加の第1引数として受け入れます。

演算子のオーバーロードは、抽象型に対してのみ可能であることに注意してください。

データ検証の要約

以下の要約では、正規表現を使用して渡された引数を電子メールアドレスとして検証するString型に基づいたEmailAddress型を定義しています。アドレスが有効でない場合、例外がスローされます。

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

要約は次のように使用してください。

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

try.haxe.orgの例を試してみてください。

参考文献

オペレータのオーバーロード

演算子のオーバーロードは抽象型でのみ可能です。

次の要約では、 Array<Int>型に基づいてVec2i型を定義しています。これは整数値を持つ2成分ベクトルです。演算子のオーバーロードは、 @:op コンパイラのメタデータで可能になりました。使用可能な数値演算子のみがオーバーロードされる可能性があります。カスタム演算子は指定できません。

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

要約は次のように使用してください。

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

try.haxe.orgの例を試してみてください。

参考文献



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow