Generics &引用;导入和使用不能出现在类型声明之后使用魔法的哈克斯

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)

我正在尝试向基本类型(如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):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
  }
}