0

我有一个可变参数方法,我想充当另一个可变参数方法的代理,但我不知道该怎么做。这是基本代码:

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() 不应该改变。)

4

1 回答 1

2

好吧,我不能声称自己擅长 ActionScript(多年未使用它..)

但如果没有别的,你可以做类似的事情..

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

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

于 2009-02-04T01:03:59.140 回答