2009-02-04 13 views
0

我有一个可变参数方法,我想作为另一个可变参数方法的代理,但我不知道该怎么做。这里是基本的代码:在ActionScript中包装可变参数方法

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()为我的心脏的内容,但b()不应该改变。)

回答

1

嗯,我不能自称是在ActionScript中任何好(已经很多年没有使用它..)

但是,如果没有别的你可以这样做..

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

在你可以使用“参数”通过申请米到通过所有传递的参数以前的版本方法,但似乎已在AS3中删除。

+0

哇。这是疯狂的。我不知道这是可能的。太感谢了!!! – benjismith 2009-02-04 01:47:52