Как получить доступ к пакету верхнего уровня в ActionScript? - PullRequest
4 голосов
/ 30 ноября 2011

Я хотел бы получить доступ к функции верхнего уровня ActionScript 3.0 из моего класса, в котором уже определен символ с тем же именем (trace), что и у функции верхнего уровня:

class A {
  public static function trace():void {
  }
  trace("Test");
}

Я хотел бы вызвать глобальную функцию ActionScript trace с помощью trace("Test"), но это невозможно, поскольку определен другой символ function trace().

В случае, когда внешнее определение, к которому я хотел бы получить доступ, было бы расположено в пакете (flash.utils или около того), я мог бы получить доступ к этому внешнему определению с помощью flash.utils.[definitionName], как я делаю это здесь с ByteArray:

import flash.utils.*;
class ByteArray {
  var data:flash.utils.ByteArray;
}

Существует ли аналогичное синтаксическое выражение в ActionScript 3.0, которое позволило бы мне получить доступ к функции трассировки в первом примере без изменения имени метода моего класса trace?

Это гипотетический вопрос, пожалуйста, не рассматривайте обходные пути. Мне нужно решить проблему точно так, как указано выше. Заранее спасибо!

1 Ответ

8 голосов
/ 30 ноября 2011

trace находится в пространстве имен public, поэтому до него можно дозвониться до public::trace, однако проблема в том, что вы переопределяете другую публичную трассировку, поэтому вы не можете вызвать предыдущуюодин.

То, что вы можете сделать:

1 - если ваш метод трассировки не должен быть public сделал его protected or private, и тогда вы сможетечтобы вызвать исходную трассировку:

public class Main extends Sprite 
{
    protected function trace(...args):void {
        public::trace(args) // access to the public function trace
    }
    public function Main():void 
    {
        trace("hello world")
    }       
}

2 - если вы не можете изменить подпись, присвойте исходную трассировку статической переменной var / const, чтобы вы могли использовать ее позже:

public class Main extends Sprite 
{
    // here save the original trace function
    private static const _trace:Function = trace

    public function trace(...args):void {
        _trace(args) // call the original trace
    }
    public function Main():void 
    {
        trace("hello world")
    }       
}
...