2009-02-27 7 views
2

액션 스크립트는 :Type을 Actionscript에서 변수로 전달할 수 있습니까? 나는</em>이 같은 모습을 기록 할 <em>

public function API(requestClass:Type=URLLoader) { 
    var req:URLLoader = new requestClass(new URLRequest("some url")); 
    req.load(url); 
    //etc 
} 

난은 URLLoader의 조롱 서브 클래스에 전달하여 API 클래스를 테스트 할 수 있도록. 이것은 Actionscript의 타입 시스템에서 가능하지 않은 것으로 보인다.

또는 런타임에 URLLoader의 load() 메서드를 변경하면 충분할 수 있습니다. 나는 시험 방법이 코드에 대한 높은 기대를 가지고 :

var b:Array = []; 
URLLoader.prototype.load = function(u:URLRequest):void { 
    b.push(u); 
} 
(new URLLoader()).load(new URLRequest("http://localhost")); 
assertEquals(b.length, 1); 

하지만은 URLLoader는 실제로이 주어의 URL 및 b.length를의 == 그래서 0

전화 않습니다! 내 API 클래스 내에 테스트 로직을 넣지 않고도 테스트 할 수있는 API 클래스를 작성할 수있는 방법이 있습니까? 나는 명백한 것을 놓쳤는가?

답변

3

개념이 AS3에서 완벽하게 작동 nontheless 귀하가 제공 한 코드에서 오류가 몇있다. 다음 코드는, 예를 들어, 컴파일하고 완벽하게 실행 :

package { 
    import flash.display.Sprite; 

    public class Main extends Sprite { 
     public function Main():void { 
      trace(getDynObj()); 
      trace(getDynObj(Number)); 
      trace(getDynObj(String)); 
     } 

     public function getDynObj(requestClass:Class = null):* { 
      var req:* = new (requestClass || int)("16.51"); 
      return req; 
     } 
    } 

} 

출력 :

public function API(requestClass:Class = null):void { 
    var req:* = new (requestClass || URLLoader)(new URLRequest("some url")); 
    //etc 
} 

참고 :은 URLLoader

16 
16.51 
16.51 

그래서, 함수는 다음과 같이 수정 요구 생성자 인수로 일반 문자열을 허용하지 않으면 문자열을 URLRequest 객체로 래핑해야합니다.

+0

클래스 클래스는 내가 찾고있는 클래스였습니다. 클래스도 역시 추측했지만 클래스 (http://is.gd/l8p9)의 기본 매개 변수를 가질 수는 없습니다. URLLoader를 작성하는 방법을 알고 있지만 의사 코드를 작성하는 중이었지만 게시물을 업데이트했습니다. – llimllib

+0

와우, 그게 뭔지 몰랐어. 연산자는 새로운 연산자의 내부 가능! – Karthik

+0

올바르게 이해하고 있으면 null은 ||에서 false와 같습니다. 많은 용도! – apscience

1

flash.utils 패키지를 살펴보십시오. 특히, 기능 : getDefinitionByName(). 이 링크에는 당신이 좋아할만한 좋은 예가 있습니다. 당신은 (물론, 적절한 수정 후)이 시도 제공 할 수 있습니다 :

public function API(mock:Object, type:String) { 
    var ClassReference:Class = getDefinitionByName(type) as Class; 
    var instance:Object = new ClassReference(); 
//instance.load(url); -- play around with your new class! 

} 
+0

유형 변수가 클래스 유형이어야하고 그 첫 번째 단계를 건너 뛰지 않았습니까? – Herms