在Haxe中使用数组作为参数

问题描述 投票:1回答:1

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

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);
        }
    }
}
haxe
1个回答
6
投票

您尝试访问的length是属性,而不是方法。见Array API Documentation

从这个改变while线:

while(i < array.length())

对此:

while(i < array.length)

详细解答:

你得到的错误是由于Haxe因为猜测类型而感到困惑。基本上,因为您将长度视为一种方法,所以假设array中的enlarge1DArray参数必须是某种具有称为length的方法的对象,其类型签名为“Void-> Int”。

简而言之,因为你要求一个方法,所以期望参数“array”具有:

{ length : Void -> Int }

当一个数组实际上有:

{ length : Int }

所以编译器感到困惑,并说你输错了。您可以在Haxe wiki页面上阅读有关Type Inference的更多相关信息。将来您可以明确说明每个函数参数的类型,然后Haxe将为您提供更多有用的错误消息。

© www.soinside.com 2019 - 2024. All rights reserved.