Как получить тип аргумента функции? - PullRequest
1 голос
/ 29 сентября 2011

Я хочу угадать тип каждого аргумента из анонимной функции, что-то вроде отображения класса с помощью отражения, но только для функции, что-то вроде ...

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?";

                }

            }

        }

    }

}

1 Ответ

4 голосов
/ 29 сентября 2011

flash.utils.getQualifiedClassName() как указано здесь: Получить тип в flex

Массив arguments доступен только изнутри данной функции.

Я не думаю, что то, что вы спрашиваете, выполнимо, если вы не сделаете какую-нибудь сумасшедшую попытку / поймать, но это всегда будет неудачным, если аргумент будет пользовательским классом, поэтому это не лучшее решение.

Другим вариантом будет добавление некоторых пользовательских метаданных, которые описывают аргументы функции.[YourMeta(arg1="String",arg2="Array")] над каждой функцией, и затем вы получаете ObjectUtil.getClassInfo(f).metadata, чтобы найти эту информацию.Это требует, чтобы вы добавили YourMeta к скомпилированным метатегам.

Может быть другой путь через что-то, что не опубликовано в ASDocs, но я не знаю об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...