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
任何人都可以解释为什么T
和A
应该是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
暗示t
或t2
为Int。但Haxe似乎更喜欢Int
:min
如果使用Int
调用则可以,但如果使用Float
调用则会失败。这合理吗?
谢谢,
答案 0 :(得分:4)
min<T:(Int,Float)>
表示T
应 Int
和 Float
。请参阅constraints section of Haxe Manual。
鉴于Int
可以隐式转换为Float
,您可以安全地删除Int
的约束。即以下内容将起作用:
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
}
}