運算子過載
只有抽象型別才能進行運算子過載 。
以下摘要基於 Array<Int>
型別定義了 Vec2i
型別。這是一個帶有整數值的雙分量向量。我的 @: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 上的例子 。