Envolvendo um método vararg em ActionScript
-
21-08-2019 - |
Pergunta
Eu tenho um método vararg que eu gostaria de agir como um proxy para outro método vararg, mas eu não tenho certeza de como fazê-lo. Aqui está o código básico:
class MyClass {
public function a(...args:*):* {
// other code
b(args);
// other code
}
public function b(...args:*):* {
// do stuff with args
}
}
Eu sou portando o código do Java, onde o sistema de tipo sabe que os argumentos são realmente suposto ser Cordas, não matrizes, para que ele possa descobrir a invocar b () passando diretamente os argumentos, e tudo funciona como você esperaria.
Mas no ActionScript, a matriz argumento é embrulhado em outro array quando invocado através do método proxy.
Assim, quando b () é chamado diretamente, a matriz é apenas um nível profundo. Mas quando b () é invocado através de um (), a matriz é de dois níveis de profundidade.
Alguém sabe de um truque para contornar isso?
(NOTA: no meu código real, a () e b () está realmente em classes separadas, e eu realmente não quero tocar a implementação de b () em tudo que eu posso reescrever a () ao meu. o conteúdo do coração, mas b () não deve mudar.)
Solução
Bem, eu não posso reivindicar ser bom em qualquer ActionScript (não tê-lo usado em anos ..)
Mas se nada mais você pode fazer algo como ..
class Test {
function a(...args:*):* { b.apply(this, args); }
function b(...args:*):* { trace(args[1]); }
}
Nas versões anteriores, você poderia usar 'argumentos' para passar todos os argumentos passados ??através do método de aplicar, mas que parece ter sido removido em AS3.