0

私が作成しているゲームのロジックを理解しようとしています。計画は、一連の関数を配列またはベクトルに格納し、各関数に何らかのパラメーターを持たせることです。

問題は、パラメーターを持つ関数を配列にプッシュしようとすると、次のように () が原因でメソッドが呼び出されることです。

arr.push(someFunction(2));

また、私がこれを持っている場合:

var arr:Array = new Array();
arr.push(someFunction(2));
arr[0]();

最後の行がパラメーターを渡していないため、明らかに機能しません。

これを達成する簡単な方法はありますか?代わりにオブジェクトを渡すか、配列をパラメーターとして渡すことができると思いますが、何かが足りないだけかもしれません。

4

4 に答える 4

1

閉鎖を使用する必要があります。

例..

function returnFuncWithArg(arg:Number):Function {
    var closureFunc:Function = function():void {
        someFunction(arg);
    }
    return closureFunc;
}

var arr:Array = new Array();
arr.push(returnFuncWithArg(2));
arr[0]();
于 2013-10-18T19:47:25.893 に答える
1

関数とパラメータを保存して、必要なときに取得できます

var functions:Array = [];

functions.push([someFunction, [2]]);//the parameter should be an array

var targetFunction:Function = functions[0][0] as Function;
var targetParameter:Array = functions[0][1] as Array;
targetFunction.apply(null,  targetParameter);
于 2013-10-19T03:06:41.937 に答える
0

わかりました通常、関数名とパラメーターを保持するオブジェクトを作成し、それらをutilクラスからコールバックで呼び出すことをお勧めします...しかし、トンの答えに加えて長い話です。これにより、returnFuncWithArg のような関数を作成する必要がなくなりました...

function returnFuncWithArg(func:Function, ...args):Function {
    var closureFunc:Function = function():void {
        //--calls function with multiple or single arguments
        func.apply(null, args);
    }
    return closureFunc;
}

function testFunction1(a:Number)
{
    trace(a);
}

function testFunction2(a:Number,b:Number):void
{
    trace(a+b);
}

var callback:Function;
callback = returnFuncWithArg(testFunction1, 10);
callback();//--output 10

callback = returnFuncWithArg(testFunction2, 23,12);
callback();//--output 35
于 2013-10-18T20:03:49.363 に答える