【问题标题】:Find out whether ActionScript Function has varargs / optional arguments using reflection?使用反射找出 ActionScript 函数是否具有可变参数/可选参数?
【发布时间】:2011-04-08 22:59:00
【问题描述】:

给定一个 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];
}

然而这根本没有输出任何东西。

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

【问题讨论】:

    标签: apache-flex reflection actionscript variadic-functions optional-arguments


    【解决方案1】:

    好吧,我可以让你靠近一点,但不是一路。

    如果您在具有该函数的对象上调用 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 也需要能够反思私人事物……但唉。

    【讨论】:

    • 同意,Flex 的反射支持有点松鼠。我希望得到比这更令人鼓舞的答案。嗯嗯。
    • 我的问题是,当我得到 Function 对象时,我无法找出它来自哪个类。据我所知,它可能是一个匿名函数。所以看起来我运气不好。
    【解决方案2】:

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

    【讨论】:

    • 我认为 Adob​​e 对选票的重视程度并不高。在他们宣布停止 Linux 移植项目时,Linux 上的 Flash Builder 是投票率最高的问题。 :-/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多