0

給定一個ActionScript Function對象,有什麼方法可以確定該函數是否有一個或多個可選參數或可變參數?該length屬性似乎返回的參數接受的最低數量:找出ActionScript函數是否具有使用反射的可變參數/可選參數?

function vararg(a:*, b:*, ...rest):void {} 
function optional(a:*, b:* = null, c:* = null):void {} 

trace(vararg.length); // 2 
trace(optional.length); // 1 

我已經試過反映在功能特性:

for (var name:String in optional) { 
    trace(name + ": " + optional[name]; 
} 

然而,這並沒有任何輸出。

有誰知道如何通過反射來發現這些信息嗎?

回答

2

嗯,我可以讓你更接近一點,但不是所有的方式。

如果您擁有的功能和這些功能都是公開的對象調用describeType,您將獲得有關功能的詳細信息:

var description:XML = describeType(this); 
var testFunction:* = description.method.(@name == "optional")[0]; 

trace(testFunction); 

這會給你有用的輸出:

<method name="optional" declaredBy="MyClass" returnType="void"> 
    <parameter index="1" type="*" optional="false"/> 
    <parameter index="2" type="*" optional="true"/> 
    <parameter index="3" type="*" optional="true"/> 
    <metadata name="__go_to_definition_help"> 
    <arg key="file" value="/path/to/MyClass.mxml"/> 
    <arg key="pos" value="222"/> 
    </metadata> 
</method> 

它也不會告訴你關於...rest可變參數。所以,有兩個警告:他們必須是公開的,你不會得到可變參數...但你會得到更多的信息.​​..

我不確定你能得到更多的信息這個。

我一直認爲describeType需要能夠反映私人的東西以及...但唉。

+0

同意,Flex的反射支持是有點松鼠。我希望得到比這更令人鼓舞的答案。呃,好吧。 – qualidafial 2011-04-11 14:35:34

+0

我的問題是,當我獲得Function對象時,我無法找出它來自哪個類。對於我所知道的,這可能是一個匿名函數。所以看起來我運氣不好。 – qualidafial 2011-04-11 14:39:33

1

http://bugs.adobe.com/jira/browse/FP-1472是爲describeType添加可變參數的錯誤。它有一個「無」的優先事項,這並沒有太多的希望,這將是固定的。也許投票會有幫助。

+0

我不認爲Adobe會對投票給予太多的評價。在他們宣佈停止Linux端口項目時,Linux上的Flash Builder是最高票數的問題。 : - / – qualidafial 2011-04-13 05:32:10

相關問題