在ActionScript中包装Vararg方法

时间:2009-02-04 00:37:43

标签: actionscript-3 variadic-functions proxy-classes

我有一个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()时,数组只有一个深度。但是当通过()调用b()时,数组的深度为两级。

有没有人知道解决这个问题的伎俩?

(注意:在我的实际代码中,a()和b()实际上是在单独的类中,我真的不想触及b()的实现。我可以将a()重写为my心的内容,但b()不应该改变。)

1 个答案:

答案 0 :(得分:1)

嗯,我不能声称自己对ActionScript有任何好处(多年来都没有用过它。)

但如果没有别的,你可以做点什么......

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

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