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
. Это разумно?
Спасибо,