0

给定一个 ActionScript Function 对象,是否有任何方法可以确定该函数是否具有一个或多个可选参数或可变参数?该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可变参数的信息。所以,有两个警告:它们必须是公开的并且你没有得到可变参数......但你确实得到了更多的信息.​​.....

我不确定您能否获得比这更多的信息。

我一直认为describeType也需要能够反思私人事物……但是,唉。

于 2011-04-09T01:12:23.433 回答
1

http://bugs.adobe.com/jira/browse/FP-1472是将可变参数添加到 describeType 的错误。它的优先级为“无”,这对解决此问题并不抱太大希望。也许投票会有所帮助。

于 2011-04-12T15:52:34.130 回答