使用反射找出 ActionScript 函数是否具有可变参数/可选参数?

发布于 2024-10-31 10:15:49 字数 466 浏览 0 评论 0原文

给定一个 ActionScript Function 对象,是否有任何方法可以确定该函数是否具有一个或多个可选参数或 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];
}

但是这根本没有输出任何内容。

有谁知道如何通过反思发现这些信息?

Given an ActionScript Function object, is there any way to determine whether that function has one or more optional parameters, or vararg parameters? The length property seems to return the minimum number of arguments accepted:

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

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

I've tried reflecting over the function properties:

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

However this did not output anything at all.

Does anyone know how to discover this information through reflection?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦幻之岛 2024-11-07 10:15:49

好吧,我可以让你靠近一点,但不能一直。

如果您在具有该函数的对象上调用 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>

它也不会告诉您有关 <代码>...休息 可变参数。因此,有两个警告:它们必须是公开的,并且您不会获得可变参数...但是您确实获得了更多信息...

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

我一直认为 describeType 也需要能够反映私有内容......但可惜。

Well, I can get you a little bit closer, but not all the way.

If you call describeType on the object that has the function AND those functions are public, you will get more information about the functions:

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

trace(testFunction);

This will give you useful output:

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

It also won't tell you about the ...rest varargs. So, there are two caveats: they must be public AND you don't get varargs... but you do get a lot more information...

I am not sure you will be able to get any more information than this.

I've always thought describeType needs to be able to reflect on private stuff as well... but alas.

左岸枫 2024-11-07 10:15:49

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

http://bugs.adobe.com/jira/browse/FP-1472 is the bug to add varargs to describeType. It's got a priority of "none", which doesn't give much hope that this will be fixed. Maybe voting it up will help though.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文