哈克斯"should be int"错误



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

谁能解释一下为什么应该IntTA而不是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似乎更喜欢Int:如果用Int调用min很好,但如果用Float's调用,则失败。这合理吗?

谢谢

min<T:(Int,Float)>表示T应该IntFloat。请参阅Haxe手册的约束部分。

给定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
}
}

相关内容

最新更新