我有一个函数将数组作为参数,并且它不断返回以下错误消息:
Test.hx:34: characters 23-24 : Array<Int> should be { length : Void -> Int }
Test.hx:34: characters 23-24 : Invalid type for field length :
Test.hx:34: characters 23-24 : Int should be Void -> Int
Test.hx:34: characters 23-24 : For function argument 'array'
这是产生错误消息的代码:
class Test{
static function main() {
var a = new Array();
a = [1,2,3,4];
enlarge1DArray(a); //why won't it work when I try to invoke this function?
}
static function enlarge1DArray(array){
var i = 0;
while(i < array.length()){
i++;
trace("i is " + i);
}
}
}
答案 0 :(得分:6)
您尝试访问的length
是属性,而不是方法。请参阅Array API Documentation。
从此更改while
行:
while(i < array.length())
到此:
while(i < array.length)
详细答案:
你得到的错误是由于Haxe因为猜测类型而感到困惑。基本上,因为您将长度视为一种方法,所以假设array
中的enlarge1DArray
参数必须是某种具有名为length的方法的对象,其类型为“Void” - &GT;内部”。
简而言之,因为你要求一个方法,所以期望参数“array”具有:
{ length : Void -> Int }
当数组实际上有:
{ length : Int }
所以编译器感到困惑,并说你输错了。您可以在Haxe wiki页面上查看Type Inference的更多相关信息。将来您可以明确说明每个函数参数的类型,然后Haxe将为您提供更多有用的错误消息。