我有一个函数,它将一个数组作为参数,并不断返回以下错误消息:
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'
Run Code Online (Sandbox Code Playgroud)
这是产生错误消息的代码:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
您尝试访问的"length"属性是属性,而不是方法.请参阅Array API文档.
改变这一length行:
while(i < array.length())
Run Code Online (Sandbox Code Playgroud)
对此:
while(i < array.length)
Run Code Online (Sandbox Code Playgroud)
详细解答:
你得到的错误是由于Haxe因为猜测类型而感到困惑.基本上,因为您将长度视为一种方法,所以假设该while参数array必须是某种具有名为length的方法的对象,其类型为"Void-> Int".
简而言之,因为你要求一个方法,所以期望参数"array"具有:
{ length : Void -> Int }
Run Code Online (Sandbox Code Playgroud)
当一个数组实际上有:
{ length : Int }
Run Code Online (Sandbox Code Playgroud)
所以编译器感到困惑,并说你输错了.您可以在Haxe wiki页面上阅读有关Type Inference的更多相关信息.将来您可以明确说明每个函数参数的类型,然后Haxe将为您提供更多有用的错误消息.