2009-06-09 3 views
2

私はすでにクラス内のすべての関数を次のようにして得ることができます。functionscript 2.0で関数のパラメータリストに手続き的にアクセス

for (var member in obj) { 
    if (obj[member] instanceof Function) { 
     var f:Function = obj[member]; 
     ... 
    } 
} 

actionscriptの関数のパラメータリストを取得する方法はありますか?たとえば、このようなことをする関数を書くことはできますか?

function getFunctionArguments (f:Function) : Array { 
    var argumentArray:Array = new Array(); 
    for (...) { 
     ... 
     argumentArray.push({ name:<argumentName>, type:<argument type> }); 
    } 
    return argumentArray; 
} 

もしそうなら、省略記号で何を記入しますか?

答えて

2

Nosirree。私は回避策を提供したいと思いますが、このような関数のシグネチャをイントロスペクトする方法はありません。関数が実際にあるときには何を行うことができます

は、argumentsオブジェクトを調べて、あなたは関係なく、署名の引数を閲覧することができ、その中に、と呼ばれます。次のように:

function doSomething() { 
    if (arguments.length > 0) { 
     if (typeof arguments[0] == "string") { 
      .... 
     } 
    } 
} 

などです。しかし、関数署名の引数の名前を見つける方法はありません(上のように、署名に引数がなくてもうまくいきます)。

+0

これは非常に便利なことですが、自分のクラスをデバッグコードで検査できるようにするためのインフラストラクチャを作成することが目的なので、関数本体に入る前にできることが必要です。 誰か他の人が貢献するためにもっと巧妙なトリックを持っている場合は、質問を開いたままにしておきますが、あなたが正しいと思われます。 – fastcall

+0

ええ、私は理由を推測した、私はちょうどexpostulatingていた。あなたが探しているものは確かに不可能ですが、AS3ではそうではありません。唯一可能なアプローチは、SWF自体のバイナリコンテンツ(Flash外で行う必要がある)を検査することです。関数引数が文字列テーブルに名前を取得するかどうかは100%確信していません。 – fenomas

関連する問題