2013-03-22 48 views
1

我希望得到一個函數的所有參數名稱的功能裏面閃光get函數的參數名稱

例如:

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函數放入(可能) – 2013-03-22 17:35:03

+0

我不認爲功能實例像其他類實例一樣工作。 – 2013-03-22 22:24:21

回答

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

我想知道是否每個都會得到這些名字。 – 2013-03-22 22:27:37

+0

剛試過。那不會。 – 2013-03-22 23:14:34

+0

所有循環基本相同。唯一的區別是他們如何運行。 'for each'是'for for(i = 0; i 2013-03-22 23:32:32

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」將每個現有的Metadata標籤添加到編譯器參數中。它需要編譯版本。

+0

我從來沒有見過這種方法。整潔的把戲。無論哪種方式,我同意這對提問者可能需要的東西完全是過度的。 – 2013-03-22 17:30:30

+0

絕對如此,但在我喜歡尋找機會解決方案之後 – 2013-03-22 17:44:29