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

AS3论点

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

    为什么你认为下面的代码不起作用?

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

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

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

    问候

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

    好的,这是解决方案。在我摔断了头之后:)

        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    17 年前

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

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

    …当你通过“test”1时,你得到的数组的第一个值是“test,1”。不过,这个解决方案在琐碎的情况下是行不通的。

        3
  •  1
  •   Kekoa    17 年前

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

    正如您现在所拥有的,它接受可变数量的参数,但您正在从aa传递一个(参数的)数组。

    推荐文章