Обертывание метода Vararg в ActionScript - PullRequest
0 голосов
/ 04 февраля 2009

У меня есть метод 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 Ответ

1 голос
/ 04 февраля 2009

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

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

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

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

...