作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道是否有一种方法可以将数组初始化为给定大小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/
我是一名优秀的程序员,十分优秀!