haxe“应该是int”错误

时间:2014-02-03 01:21:59

标签: haxe type-parameter

Haxe似乎认为某些事情必须是Int。在以下函数中,

class Main {
    static function main() {
        function mult_s<T,A>(s:T,x:A):A { return cast s*x; }
        var bb = mult_s(1.1,2.2);
    }
}

我得到了(和Haxe 3.01):

Main.hx:xx: characters 48-49 : mult_s.T should be Int
Main.hx:xx: characters 50-51 : mult_s.A should be Int

任何人都可以解释为什么TA应该是Int而不是Float


更令人费解的例子是:

class Main {
    public static function min<T:(Int,Float)>(t:T, t2:T):T { return t < t2 ? t : t2; }
    static function main() {
        var a = min(1.1,2.2); //compile error
        var b = min(1,2); //ok
    }
}

我看不出为什么t<t2暗示tt2为Int。但Haxe似乎更喜欢Intmin如果使用Int调用则可以,但如果使用Float调用则会失败。这合理吗?

谢谢,

1 个答案:

答案 0 :(得分:4)

min<T:(Int,Float)>表示T Int Float。请参阅constraints section of Haxe Manual

鉴于Int可以隐式转换为Float,您可以安全地删除Int的约束。即以下内容将起作用:

http://try.haxe.org/#420bC

class Test {
  public static function min<T:Float>(t:T, t2:T):T { return t < t2 ? t : t2; }
  static function main() {
    var a = min(1.1,2.2); //ok
    $type(a); //Float
    trace(a); //1.1
    var b = min(1,2); //ok
    $type(b); //Int
    trace(b); //1
  }
}