0

次のような関数が与えられた場合

function printAndAdd( s: String, a: int, b: int ) {
  // ...
}

実行時に関数の引数 (名前と型) を列挙する方法はありますか? 何かのようなもの

for ( var arg: ArgumentDescriptor in printAndAdd ) {
    // arg.type yields the class object of the argument, i.e. 'String' or 'int'.
    // arg.name yields the name of the argument, i.e. 's' or 'a'
}

さまざまなシグネチャを持つイベント ハンドラーのリストがあり、呼び出すイベント ハンドラーの名前とArrayオブジェクトの名前を取得します。関数に配列を渡すこともできapply()ますが、最初にエラー チェックを行って、より適切なエラー メッセージを表示したいと考えています。

4

1 に答える 1

2

describeType()を使用して、探している情報を見つけることができます。ただし、これが機能するには、関数がである必要がありますpublic。プライベートメソッドはによってイントロスペクトされませんdescribeType()

printAndAddの方法であると仮定すると、次のMyClassことができます。

var metadata:XML = describeType(MyClass);
//find all the 'parameter' nodes of any method called 'printAndAdd'
var params:XMLList = metadata..method.(@name == "printAndAdd").parameter;

for each (var param:XML in params) {
    var index:int = param.@index;
    var type:String = param.@type;
    var optional:Boolean = param.@optional == "true";
}

あなたが見つけることができないものの1つは、パラメータの名前ですが、そのインデックスはあなたの目標には十分かもしれないと思います。

これよりも強力なリフレクションが必要な場合は、as3commonsリフレクトライブラリをご覧ください。

于 2012-11-20T17:00:12.093 に答える