2011-11-30 3 views
4

내가 최고 수준의 함수와 같은 이름 (trace)와 기호가 이미 정의되어있는 광산의 클래스에서 ActionScript 3.0 top level function으로 접근하고 싶습니다 :ActionScript에서 최상위 패키지에 액세스하는 방법?

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

내가 전역 ActionScript를 호출하고 싶습니다 tracetrace("Test")으로 기능하지만 다른 기호 function trace()이 정의 된대로 가능하지 않습니다. 내가 액세스하고자하는 외부 정의 패키지 (flash.utils 정도) 나는이 ByteArray 여기처럼, 내가 flash.utils.[definitionName]과 그 외부 정의에 액세스 할 수 있습니다에 위치 될 경우에

:

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

내 클래스 메서드 trace의 이름을 변경하지 않고 첫 번째 예제에서 trace 함수에 액세스 할 수있는 비슷한 구문 표현식이 ActionScript 3.0에 있습니까?

이것은 가상의 질문이므로 해결 방법을 고려하지 마십시오. 위에 질문 한대로 정확하게 문제를 해결해야합니다. 미리 감사드립니다! 그것이 그러나 여기, public::trace 호출에 도달 할 수 있도록

+0

네가 빠져 나갈 뭔가가 있다고 생각해. 코드가 게시되면 플래시 추적 기능을 호출하는 데 방해가되지 않는 추적을 호출하기 위해 A의 인스턴스를 가져야합니다. 추적 방법이 정적이 아닌 것은 확실합니까? –

답변

8

trace 문제가 다른 공공 추적을 재정의 있다는 것입니다 public 네임 스페이스에, 그래서 당신은 이전을 호출 할 수 없습니다.

당신이 할 수있는 것은 :

1 - 당신의 방법 추적 publicprotected 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") 
    }  
} 
+0

감사! 나는 A :: trace 메소드가 정적 (예제 코드를 편집 한 것)이라는 것을 의미했기 때문에 두 번째 예제는 작동하지 않지만 첫 번째 것은 분명히 최상의 해결책이다. – daluege

+0

'+ 1' 나는 방금 배웠다. – Marty

+0

+1 나도 ... :) – weltraumpirat

관련 문제