0

ActionScript Function オブジェクトが与えられた場合、その関数に 1 つ以上のオプションのパラメーターまたは vararg パラメーターがあるかどうかを判断する方法はありますか? プロパティは、length受け入れられる引数の最小数を返すようです:

function vararg(a:*, b:*, ...rest):void {}
function optional(a:*, b:* = null, c:* = null):void {}

trace(vararg.length);   // 2
trace(optional.length); // 1

関数のプロパティを反映してみました:

for (var name:String in optional) {
  trace(name + ": " + optional[name];
}

しかし、これは何も出力しませんでした。

反射によってこの情報を発見する方法を知っている人はいますか?

4

2 に答える 2

2

ええと、少し近づけることはできますが、完全にはできません。

describeType関数を持ち、それらの関数が公開されているオブジェクトを呼び出すと、関数に関する詳細情報が得られます。

var description:XML = describeType(this);
var testFunction:* = description.method.(@name == "optional")[0];

trace(testFunction);

これにより、有用な出力が得られます。

<method name="optional" declaredBy="MyClass" returnType="void">
  <parameter index="1" type="*" optional="false"/>
  <parameter index="2" type="*" optional="true"/>
  <parameter index="3" type="*" optional="true"/>
  <metadata name="__go_to_definition_help">
    <arg key="file" value="/path/to/MyClass.mxml"/>
    <arg key="pos" value="222"/>
  </metadata>
</method>

また、可変引数についても教えてくれません...rest。したがって、2 つの注意点があります。それらは公開されている必要があり、varargs を取得できません...しかし、より多くの情報を取得できます...

これ以上の情報を入手できるかどうかはわかりません。

私はいつもdescribeType、プライベートなことについても反省できるようにする必要があると思っていました...しかし、悲しいかな。

于 2011-04-09T01:12:23.433 に答える
1

http://bugs.adobe.com/jira/browse/FP-1472は、describeType に可変引数を追加するバグです。これは「なし」の優先順位を持っているため、これが修正される見込みはあまりありません。多分それを投票することは助けになるでしょう。

于 2011-04-12T15:52:34.130 に答える