0

引数の不一致エラーがよく発生します。通常、program.damn をデバッグするのに多くの時間がかかります。関数の入り口の要件と、それらがどこから来たのかを知っていることを本当に願っています。

関数変数が関数であることしか知らないので、他の情報はありません。私はこのような大量のコードを書きました

    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);
        }
    }

私は物事をもっと賢くすべきです。

4

1 に答える 1

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>

これがあなたが探しているものかどうかはわかりません.あなたの例で Function 引数を渡すと、 Function クラスの説明が得られます:

<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>

しかし、おそらく、「呼び出し」メソッドをリファクタリングして、正しい説明を取得できるようにすることができます(たとえば、オブジェクトクラスやメソッド名などの追加情報を渡すことができるため、その中のメソッドシグネチャを分析できます。最も美しいソリューションではありません、 それでも...)

于 2012-09-27T15:07:56.533 に答える