代码之家  ›  专栏  ›  技术社区  ›  Onur Yıldırım

AS3参数

  •  2
  • Onur Yıldırım  · 技术社区  · 15 年前

    为什么您认为下面的代码不起作用? 您会更改/添加什么以使其工作?

    感谢您的帮助。

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

    我得到一个参数错误(错误1063):

    Argument count mismatch on test_fla::MainTimeline/TraceIt(). Expected 2, got 1.
    

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

    ..请保持功能结构(交通)完好。我需要一个以相同顺序使用相同函数的解决方案。我必须将参数传递给一个变量,并在上面的exec()方法中使用它们。

    当做

    3 回复  |  直到 15 年前
        1
  •  7
  •   Onur Yıldırım    15 年前

    好的,这是解决办法。打破我的头后:)

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

    通过这种方式,可以将参数作为变量传递给其他函数并执行它们。

    感谢大家抽出时间来帮忙…

        2
  •  1
  •   Lobstrosity    15 年前

    当traceit()最终被调用时,使用的是1个数组参数,而不是字符串和int参数。

    您可以将traceit()更改为:

    function TraceIt(args:Array)
    {
         trace(args[0], args[1]);
    }
    

    或者可以将exec()更改为:

    function exec()
    {
         func.apply(null, argum[0].toString().split(","));
    }
    

    …当您通过“测试”1时,您会看到第一个值为“测试1”的数组。不过,这个解决方案的作用并不超出一般情况。

        3
  •  1
  •   Kekoa    15 年前

    将bb函数更改为如下所示:

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

    正如您现在看到的,它接受一个可变数量的参数,但是您正在从a a传入一个数组(参数)。