AS3论点

Onu*_*rım 2 arguments function actionscript-3

为什么你认为下面的代码不起作用?你会改变/添加什么使它工作?

任何帮助表示赞赏..

function TraceIt(message:String, num:int)
{
    trace(message, num);
}

function aa(f:Function, ...args):void
{
    bb(f, args);
}

aa(TraceIt, "test", 1);

var func:Function = null;
var argum:Array = null;

function bb(f:Function, ...args):void
{
    func = f;
    argum = args;
    exec();
}

function exec()
{
    func.apply(null, argum);
}
Run Code Online (Sandbox Code Playgroud)

我得到一个ArgumentError(错误#1063):

Argument count mismatch on test_fla::MainTimeline/TraceIt(). Expected 2, got 1.
Run Code Online (Sandbox Code Playgroud)

..因此,传递的参数(argum)无法提供所有传递的参数.

..请保持功能结构(流量)完整.我需要一个使用相同函数的解决方案.我必须将args传递给变量并在上面的exec()方法中使用它们.

问候

Onu*_*rım 7

好的,这是解决方案..打破我的头后:)

    function TraceIt(message:String, num:int)
    {
        trace(message, num);
    }

    function aa(f:Function=null, ...args):void
    {
        var newArgs:Array = args as Array;
        newArgs.unshift(f);
        bb.apply(null, newArgs);
    }

    aa(TraceIt, "test", 1);

    var func:Function = null;
    var argum:*;

    function bb(f:Function=null, ...args):void
    {
        func = f;
        argum = args as Array;
        exec();
    }

    function exec():void
    {
        if (func == null) { return; }
        func.apply(this, argum);
    }
Run Code Online (Sandbox Code Playgroud)

这样,您可以将参数作为变量传递给不同的函数并执行它们.

感谢大家花时间帮忙......