gpt4 book ai didi

generics - 在 Haxe 3 中正确调用泛型函数

转载 作者:行者123 更新时间:2023-12-05 07:59:46 25 4
gpt4 key购买 nike

以下函数没有任何用处,但说明了我正在尝试使用的语法。

@: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);

所以看起来 是自动正确确定的,尽管我不知道 如何。这很有道理,但 精确规则是什么?

最佳答案

我不确定这是真正的问题还是只是为了测试通用函数的工作原理。

在您的示例中,假设有点奇怪。想象一下您使用 Point,这对于泛型类来说应该是可能的。 point.x = 5 将如何工作?那么为什么你希望 Point 是通用的,你想要什么?

为了更好地理解泛型函数的工作原理,我发现 Lambda 类是一个有用的引用。 https://github.com/HaxeFoundation/haxe/blob/development/std/Lambda.hx

关于generics - 在 Haxe 3 中正确调用泛型函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20870938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com