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

1 回答 1

6

length您尝试访问的是属性,而不是方法。请参阅数组 API 文档

while从此更改行:

while(i < array.length())

对此:

while(i < array.length)

详细答案:

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

简而言之,因为您要的是一种方法,所以它期望参数“array”具有:

{ length : Void -> Int }

当一个数组实际上有:

{ length : Int }

所以编译器很困惑,说你打错了。您可以在类型推断的 Haxe wiki 页面上阅读更多相关信息。以后你可以明确说明每个函数参数的类型,然后 Haxe 会给你更多有用的错误信息。

于 2012-11-21T07:54:44.437 回答