2012-09-27 3 views
0

나는 흔히 인수 불일치 오류가 발생하는데, 보통 program.damn을 디버깅하는데 많은 시간이 걸린다. 나는 함수의 입구 요구 사항과 그들이 어디서 왔는지를 알고 싶다.functionscript에서 함수의 정보를 얻는 방법은 무엇입니까?

나는 함수 변수가 함수인지, 다른 어떤 정보도 알지 못하기 때문에. 나는 더 현명하게 일을해야이

public static function call(func:Function,params:Array = null,addToTailIfNotNull:*=null):void{ 
     if (func!=null){ 
      var args:Array =[]; 
      if(params!=null){ 
       args = ArrayTools.clone(params); 
      } 
      if (addToTailIfNotNull!=null){ 
       args.push(addToTailIfNotNull); 
      } 
      func.apply(null,args); 
     } 
    } 

같은 대규모 코드를 썼다.

+1

대부분 함수의 인수와 유형의 개수를 알아야합니다. 필자는 실제로 이런 일이 불가능하다고 생각합니다. 모든 함수가 가변 길이의 배열로 호출 될 수 있기 때문입니다. 또한 일부 함수에는 필수 매개 변수, 선택적 매개 변수 및 변수 길이가 혼합 된 매개 변수 배열로 구성된 인수가 혼합되어 있습니다. 유형 일관성은 컴파일 타임에 Flash에서 수행되며 호환되지 않는 매개 변수를 함수에 무작위로 전달하는 사람들은 형식 ​​강제 변환 오류 만 기다리고 있습니다. – Vesper

답변

2

flash.utils.describeType() 메소드를 사용하여 제안 할 수 있습니다. 매개 변수로 전달한 객체에 대한 설명이있는 XML을 반환합니다.

는 클래스가 있다고 가정하자 :

public class Example { 
    public function someMethod(number:Number, string:String):void { 

    } 
} 

을 그리고 당신은 어딘가에 전화 :

flash.utils.describeType(Example); 

당신은 거기에 이런 일이있는 XML을 얻어야한다 :

<method name="someMethod" declaredBy="com.example::Example" returnType="void"> 
    <parameter index="1" type="Number" optional="false"/> 
    <parameter index="2" type="String" optional="false"/> 
    <metadata name="__go_to_definition_help"> 
    <arg key="pos" value="501"/> 
    </metadata> 
</method> 

I 이것이 당신이 원하는 것임을 확신하지 못합니다. 예를 들면, 당신이 통과하면 함수 인자가 있습니다. 기능 클래스의 scription : - 객체 클래스와 메소드 이름처럼 -

<type name="builtin.as$0::MethodClosure" base="Function" isDynamic="false" isFinal="true" isStatic="false"> 
    <extendsClass type="Function"/> 
    <extendsClass type="Object"/> 
    <accessor name="length" access="readonly" type="int" declaredBy="Function"/> 
    <accessor name="prototype" access="readwrite" type="*" declaredBy="builtin.as$0::MethodClosure"/> 
</type> 

하지만 어쩌면 당신이 올바른 설명을 얻을 수 있도록 방법 "전화"를 리팩토링 할 수 있습니다 (예를 들어 그것으로 추가 정보를 전달 그래서 당신은 할 수 그것의 메소드 서명을 분석하십시오. 가장 아름다운 해결책은 아니지만 여전히 ...)

+0

이 메소드에는 클래스 참조가 필요하지만 OP에는 함수 참조 만 있고 선언에 대한 정보, 클래스가 없으며 아무 것도 없습니다. 그리고 그는 실제로 주어진 매개 변수에 의해 접근 가능한 함수가 어떤 매개 변수를 받아들이는지 알고 싶어합니다. 그래서 이것은 효과가 없을 것입니다. – Vesper

+0

그래서 "나는 이것이 당신이 원하는 것"이라고 썼다. describeType을 사용하려면 초기 메소드 ("call")의 일부 리팩토링이 필요합니다. –

+0

@Vesper OP는 사실 클래스 메서드를 참조하지만 정적입니다. ** public ** static function call public은 클래스 정의의 모든 부분 뒤에 있습니다. –

관련 문제