以下函数没有任何用处,但说明了我尝试使用的语法。
@:generic public static function newPoint<T: Dynamic>(point: Point<T> = null): Point<T>
{
if (point == null)
point = new Point<T>();
return point;
}
T如何确定/通过? var pt: Point<Int> = newPoint<Int>();
给了我一个错误,与var pt: Point<Int> = newPoint();
那么调用这种泛型函数的正确方法是什么?寻找一个例子的时间给了我什么 - Haxe有时真的是一个黑盒子。
这是另一个例子:
@:generic static private function randomElement<T>(array: Array<T>, usedIndices: Map<Int, Int> = null): T
{
var ix: Int;
if (usedIndices != null)
{
do {
ix = Math.floor(Math.random() * array.length);
} while (usedIndices.exists(ix) == true);
usedIndices.set(ix, 0);
}
else {
ix = Math.floor(Math.random() * array.length);
}
return array[ix];
}
现在这对我来说完美无缺:
var elems: Array<Int> = [2, 3, 8, 7, 11, 16];
var elem: Int = randomElement(elems);
所以它看起来像&lt; T&gt;是自动确定的,虽然我不完全知道如何。它有意义,但精确规则是什么?
答案 0 :(得分:0)
我不确定这是真正的问题,还是只是为了测试泛型函数的工作原理。
在你的例子中,假设有点奇怪。您使用Point的成像,这应该可以使用泛型类。 point.x = 5
将如何运作?那你为什么要Point是通用的,你想要什么?
为了更好地理解泛型函数如何工作,我发现Lambda类是一个有用的参考。 https://github.com/HaxeFoundation/haxe/blob/development/std/Lambda.hx