Процедурный доступ к списку параметров функции в actionscript 2.0

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

for (var member in obj) {
    if (obj[member] instanceof Function) {
        var f:Function = obj[member];
        ...
    }
}

Есть ли способ получить список параметров функции в actionscript? Например, могу ли я написать функцию, которая делает что-то подобное?

function getFunctionArguments (f:Function) : Array {
    var argumentArray:Array = new Array();
    for (...) {
        ...
        argumentArray.push({ name:<argumentName>, type:<argument type> });
    }
    return argumentArray;
}

Если да, то что мне заполнить в многоточии?


person fastcall    schedule 09.06.2009    source источник


Ответы (1)


Nosirree. Я хотел бы дать вам обходной путь, но нет способа проанализировать сигнатуру функции, как это.

Что вы можете сделать, так это то, что когда функция действительно вызывается, внутри нее вы можете просмотреть аргументы независимо от подписи, заглянув в объект arguments. Как в:

function doSomething() {
    if (arguments.length > 0) {
         if (typeof arguments[0] == "string") {
             ....
         }
    }
}

и так далее. Но даже тогда нет возможности узнать имя аргументов в сигнатуре функции (и это прекрасно работает, даже если в сигнатуре нет аргументов, как указано выше).

person fenomas    schedule 10.06.2009
comment
Это довольно полезно знать, но моя цель — написать некоторую инфраструктуру, чтобы сделать мои классы доступными для проверки с помощью кода отладки, поэтому это должно быть что-то, что вы можете сделать, прежде чем переходить к телу функции. Я оставлю вопрос открытым на некоторое время, если у кого-то еще есть какие-то умные уловки, но, похоже, вы правы. - person fastcall; 11.06.2009
comment
Да, я догадался о причине, я просто увещевал. То, что вы ищете, определенно невозможно, в том числе и в AS3. Единственным возможным подходом было бы проверить двоичное содержимое самого SWF (что нужно было бы сделать вне флэш-памяти), и даже в этом случае я не уверен на 100%, получают ли аргументы функции свои имена в таблице строк или нет. - person fenomas; 12.06.2009