2013-03-22 3 views
1

Я хочу, чтобы получить все аргументы имена функции внутри функциифлэш имя аргумента ПОЛУЧИТЬ функционального направления

пример:

function fct(var1:string,var2:string){ 
    var names:Array=... 
    trace(names); 
} 

должен проследить: var1, var2

Спасибо!

+0

вы можете использовать describeType - http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/package.html#describeType() - хотя вам может понадобиться включить функцию fct в class first (возможно) – 2013-03-22 17:35:03

+0

Я не думаю, что экземпляры функций работают как другие экземпляры класса. –

ответ

2

Проще говоря, это невозможно. Самое близкое, что вы можете получить, это номер аргумента и значение. Смотрите ниже:

function fct(... args):void { 
    for (var v:Object in args) { 
     trace(v + ": " + args[v]); 
    } 
} 
var str1:String = "this is a test"; 
var str2:String = "this is another test"; 
fct(str1, str2); 

//output 
//0: this is a test 
//1: this is another test 

Для дальнейшего использования, вы можете использовать ... + имя переменной, чтобы столько аргументов, сколько вам нужно. Независимо от того, вам нужно просто получить доступ к args[ INDEX ], а не к фактическому имени переменной, к которому вы не сможете получить доступ, так как не было возможности применить область действия (например, variableName[ "propertyName" ])

+0

Интересно, получится ли 'для каждого' имена. –

+0

Просто попробовал. Это будет не так. –

+0

Все петли по существу одинаковы. Единственная разница в том, как они работают. 'for each' - это сокращение от' for (i = 0; i

1

Это невозможно, , но вы можете использовать тег метаданных для установки имен аргументов. Я создаю простой пример. Но я не понимаю, как это может помочь вам в реальных проектах:

[Arguments(param1="arg1",param2="arg2")] 
public function test(arg1:Number, arg2:Number):void { 

    var desc_xml:XML = describeType(Object(this).constructor); 
    var metas_xml:XMLList = desc_xml.factory.method.(@name == "test"); 
    var args_xml:XMLList = metas_xml.metadata.(@name == "Arguments"); 

    for each (var argx:XML in args_xml.arg) 
    { 
     trace([email protected]()); 
    } 

}; 

Я использую flex 4.6. Не забудьте добавить все существующие теги метаданных в аргумент компилятора с помощью «-keep-as3-metadata + = Arguments». Это необходимо для компиляции версий.

+0

Я никогда не видел этот метод раньше. Аккуратный трюк. В любом случае, я согласен, что это полностью переполняет то, что, вероятно, потребует ассер. –

+0

Абсолютно верно, но после вопросов мне понравилось найти возможность решения –

Смежные вопросы