Обтекание метода Vararg в ActionScript

У меня есть метод 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 (), массив имеет два уровня глубины.

Кто-нибудь знает хитрость, чтобы обойти это?

(ПРИМЕЧАНИЕ: в моем реальном коде a () и b () фактически находятся в отдельных классах, и я действительно не хочу касаться реализации b () вообще. Я могу переписать a () к своему сердцу, но b () не должно меняться.)

1 ответ

Решение

Ну, я не могу претендовать на то, чтобы быть хорошим в ActionScript (не использовал его в течение многих лет..)

Но если ничего другого, вы можете сделать что-то вроде..

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

В предыдущих версиях вы могли использовать аргументы для передачи всех переданных аргументов через метод apply, но, похоже, это было удалено в AS3.

Другие вопросы по тегам