Actionscript 3 AS3将带参数的函数推入数组或向量

Actionscript 3 AS3将带参数的函数推入数组或向量,actionscript-3,Actionscript 3,我试图弄清楚我正在做的一个游戏的逻辑,计划是将一组函数存储到一个数组或向量中,每个函数都有某种参数 问题是,当我尝试将带有参数的函数推入数组时,会调用该方法,因为()的原因,如下所示: arr.push(someFunction(2)); 如果我有这个: var arr:Array = new Array(); arr.push(someFunction(2)); arr[0](); 它显然不起作用,因为最后一行没有传递任何参数 有没有一个简单的方法来实现这一点? 我想我可以传递一个对象或作

我试图弄清楚我正在做的一个游戏的逻辑,计划是将一组函数存储到一个数组或向量中,每个函数都有某种参数

问题是,当我尝试将带有参数的函数推入数组时,会调用该方法,因为()的原因,如下所示:

arr.push(someFunction(2));
如果我有这个:

var arr:Array = new Array();
arr.push(someFunction(2));
arr[0]();
它显然不起作用,因为最后一行没有传递任何参数

有没有一个简单的方法来实现这一点?
我想我可以传递一个对象或作为参数传递一个数组,但可能我只是缺少了一些东西。

您应该使用闭包

例如

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


好的,通常我建议创建一个对象,该对象保留函数名和参数,然后通过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

您可以保存函数和参数,然后在需要时获取它们

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

潘的答案是要走的路,我想补充我的解释。在像ActionScript这样的脚本语言中,函数调用会立即计算。因此,当您编写类似于
arr.push(someFunction(2))您不是将函数本身推入数组,而是将函数的结果推入数组。为了引用函数本身,必须将函数名放在不带括号的位置。在C等其他语言中,存储函数的变量称为委托


你能解释一下你想用这个来完成什么吗?我认为有一种比将函数存储在数组中更好的方法。

问题在于,每次调用该函数时,它都会添加该函数的一个副本。如果经常这样做,可能会导致严重的内存问题(实际上Adobe evangelists和开发人员建议您不要在AS3中使用匿名函数)
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);