サーチ…
構文
- 抽象識別子 ( 基底型 ){...}
- 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