运算符重载
只有抽象类型才能进行运算符重载 。
以下摘要基于 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 上的例子 。