在Haxe中使用数组作为参数

时间:2012-11-21 07:23:54

标签: haxe

我有一个函数将数组作为参数,并且它不断返回以下错误消息:

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);
        }
    }
}

1 个答案:

答案 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将为您提供更多有用的错误消息。