Generics &引用;导入和使用不能出现在类型声明之后使用魔法的哈克斯
我正在尝试向基本类型(如Int、Float或现有/库类型)添加一个小于或等于的方法(非侵入式),我无法更改这些类型。(见我的另一个问题)我读到“使用”关键字是实现这一点的方法 我打算做的是:Generics &引用;导入和使用不能出现在类型声明之后使用魔法的哈克斯,generics,haxe,type-parameter,Generics,Haxe,Type Parameter,我正在尝试向基本类型(如Int、Float或现有/库类型)添加一个小于或等于的方法(非侵入式),我无法更改这些类型。(见我的另一个问题)我读到“使用”关键字是实现这一点的方法 我打算做的是: class IntOrder { static public function le(x:Int,y:Int):Bool { return x <= y; } } class FloatOrder { static public function le(x:Float,y:Float)
class IntOrder {
static public function le(x:Int,y:Int):Bool { return x <= y; }
}
class FloatOrder {
static public function le(x:Float,y:Float):Bool { return x <= y; }
}
class StringOrder {
static public function le(x:String,y:String):Bool {... }
}
//...Other classes
using IntOrder;
using FloatOrder;
using StringOrder;
//... Other using statements
class Main {
@:generic static public function compare_<A:{function le(y:A):Bool;}>(x:A,y:A): Int {
if (x.le(y) && y.le(x)) return 0;
else if (x.le(y)) return -1;
else se return 1;
}
}
返回:
Main.hx:22: characters 12-25 : Constraint check failure for compare_.A
Main.hx:22: characters 12-25 : Int should be { le : y : Int -> Bool }
似乎x.le(y)在比较中仍然不起作用。您只需使用语句将
移到顶部,并使用完整路径(package.Module.class)引用类即可
哈克斯定义了这一点
根据阴影的原理,导入了最新的类型
始终优先于前几项
因此,为了让IntOrder不总是被阴影笼罩,将其置于FloatOrder之下
以下是演示:
杰出的我从未找到使用
的示例,其中目标已定义到位。生成的.le()
对于原始示例仍然不起作用。有什么想法吗?
Main.hx:22: characters 12-25 : Constraint check failure for compare_.A
Main.hx:22: characters 12-25 : Int should be { le : y : Int -> Bool }
using Test.FloatOrder;
using Test.IntOrder;
class IntOrder {
static public function le(x:Int,y:Int) return "IntOrder";
}
class FloatOrder {
static public function le(x:Float,y:Float) return "FloatOrder";
}
class Test {
static function main():Void {
trace(1.le(1)); //IntOrder
trace(1.1.le(1)); //FloatOrder
}
}