代码之家  ›  专栏  ›  技术社区  ›  benjismith

在ActionScript中包装vararg方法

  •  0
  • benjismith  · 技术社区  · 16 年前

    我有一个vararg方法,我想作为另一个vararg方法的代理,但我不知道该怎么做。基本代码如下:

    class MyClass {
    
       public function a(...args:*):* {
          // other code
          b(args);
          // other code
       }
    
       public function b(...args:*):* {
          // do stuff with args
       }
    
    }
    

    我正在从Java中移植代码,其中类型系统知道参数实际上应该是字符串,而不是数组,因此它可以通过直接传递参数来找出调用B()的方法,并且所有的工作都是你所期望的。

    但是在actionscript中,当通过代理方法调用时,参数数组被包装到另一个数组中。

    因此,当直接调用b()时,数组的深度只有一层。但是当通过a()调用b()时,数组有两层深度。

    有人知道避开这个的诀窍吗?

    (注意:在我的实际代码中,a()和b()实际上是在不同的类中,我根本不想接触b()的实现。我可以将a()重写为心脏的内容,但b()不应该更改。)

    1 回复  |  直到 11 年前
        1
  •  1
  •   Sciolist    16 年前

    好吧,我不能说我擅长动作脚本(多年来没有用过)。

    但是如果没有别的事你可以做……

    class Test {
        function a(...args:*):* { b.apply(this, args); }
        function b(...args:*):* { trace(args[1]); }
    }
    

    在以前的版本中,您可以使用“arguments”通过apply方法传递所有传递的参数,但在AS3中似乎已将其删除。