我有一个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()不应该改变。)
答案 0 :(得分:1)
嗯,我不能声称自己对ActionScript有任何好处(多年来都没有用过它。)
但如果没有别的,你可以做点什么......
class Test {
function a(...args:*):* { b.apply(this, args); }
function b(...args:*):* { trace(args[1]); }
}
在以前的版本中,您可以使用'arguments'通过apply方法传递所有传递的参数,但这似乎已在AS3中删除。