gpt4 book ai didi

arrays - 如何在haxe中将数组初始化为给定大小

转载 作者:行者123 更新时间:2023-12-02 09:45:39 24 4
gpt4 key购买 nike

我想知道是否有一种方法可以将数组初始化为给定大小n(例如在c++的std::vector构造函数中,或者@steve richey的答案下面没有提示元素 hack)?

我的想法是将 n 个默认元素推回到新创建的数组中,但即使这似乎也是不可能的,因为似乎无法定义默认元素,如原始问题所示如下:

-- 原始问题--

我正在尝试在 haxe 中编写一个静态函数(从 3.0.1 开始)来创建一个给定大小 n 的数组,其中包含任意类型 T 的类型。我不知道如何使用 Type.createEmptyInstance( )对此正确。我能得到的最接近的是:

class Main {
static public function new_array<T>(n:Int):Array<T> {
var a:Array<T> = new Array<T>();
var t:T = new T(); //not OK
for (i in 0...n)
a.push(Type.createEmptyInstance(Type.getClass(t)));
return a;
}
static public function main() {
var a:Array<Int> = new_array(3);
}
}

new_array() 中的第二行有问题。编译器说:Main.hx:4:字符 12-19:只能构造泛型类型参数

我的问题是,如何使这样的函数适用于任何类型 T 的数组。

谢谢

最佳答案

在 Haxe 中,数组不是固定长度的。您可以使用向量,其行为类似但具有固定长度。

class Test {
static function main(){
var vector = new haxe.ds.Vector(5); // Starting Length
vector[0] = "zero";
vector[3] = "three";
// vector[7] = "seven"; // Will cause Runtime error on some platforms!
for ( val in vector ) {
trace( val );
// "zero"
// null
// null
// "three"
// null
}
}
}

请注意,向量是“抽象”,因此它们包装了基础类型。在某些平台(例如Flash)上,这是一个真正的Vector,它会抛出越界访问的错误。在其他平台(例如 JS)上,底层实现是一个数组,因此它可能不会因获取超出范围的项目而抛出错误等。如果您坚持不破坏的合理用法,您应该没问题:)

作为关于数组的旁注,如果您执行以下操作:

var arr = [];
arr[0] = "zero";
arr[8] = "eight";

有些平台会用“null”填充第 1-7 项,有些则不会 - 该行为取决于平台并且不可靠。

参见:

关于arrays - 如何在haxe中将数组初始化为给定大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20766320/

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