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」を持つ、長さと呼ばれるメソッドを持つある種のオブジェクトでなければならないと想定していました。

要するに、メソッドを要求していたので、パラメーター「配列」に次のものが必要であると予想していました。

{ length : Void -> Int }

配列が実際に持っている場合:

{ length : Int }

そのため、コンパイラは混乱し、入力が間違っていると言いました。詳細については、Haxe wiki ページのType Inferenceを参照してください。将来、各関数パラメータの型が何であるかを明示的に述べることができ、Haxe はより有用なエラー メッセージを表示します。

于 2012-11-21T07:54:44.437 に答える