【问题标题】:How to get the argument's type of a function?如何获取函数的参数类型?
【发布时间】:2011-09-29 15:16:54
【问题描述】:

我想从匿名函数中猜测每个参数的类型,比如用反射映射一个类,但只是为了一个函数,比如......

public function guessMyArgumentType(f:Function):void {

    for each (argument:* in f.arguments) {

        trace(typeof(argument));

    }

}

谢谢!

更新

也许这很疯狂,但又如何:

public static function guessMyArgumentType(f:Function):String {

    try {

        f(2);
        return "int";

    } catch (error:Error) {

        try {

            f("a");
            return "String";

        } catch (error:Error) {

            try {

                f(["uno", "dos", "tres"]);
                return "Array";

            } catch (error:Error) {

                try {

                    f(new ArrayCollection(["uno", "dos", "tres"]));
                    return "ArrayCollection";

                } catch (error:Error) {

                    return "WTF?";

                }

            }

        }

    }

}

【问题讨论】:

    标签: actionscript-3 actionscript


    【解决方案1】:

    flash.utils.getQualifiedClassName() 此处引用:Get the type in flex

    参数数组只能从给定函数内部访问。

    我认为你的要求是不可行的,除非你做一些疯狂的 try/catch 事情,但如果参数是自定义类,那总是会失败,所以这不是一个很好的解决方案。

    另一种选择是添加一些描述函数参数的自定义元数据。 [YourMeta(arg1="String",arg2="Array")] 在每个函数上方,然后您可以使用 ObjectUtil.getClassInfo(f).metadata 查找该信息。这需要您将 YourMeta 添加到已编译的元标记参数中。

    可能还有另一种方法可以解决未发布到 ASDocs 但我不知道的内容。

    【讨论】:

    • +1 感谢元数据提示!。我将通过传递期望转换类型作为参数来解决这个问题。
    猜你喜欢
    • 2020-08-22
    • 2017-08-08
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多