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.)

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top