2009-02-04 12 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