2011-09-29 31 views
1

我想從一個匿名函數猜每個參數的類型,像與反思,但僅僅是一個函數,像類映射...如何獲取參數的函數類型?

public function guessMyArgumentType(f:Function):void { 

    for each (argument:* in f.arguments) { 

     trace(typeof(argument)); 

    } 

} 

的感謝!

UPDATE

這也許是瘋狂的,但怎麼樣:

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

       } 

      } 

     } 

    } 

} 
+0

確實瘋了:-) –

回答

4

flash.utils.getQualifiedClassName()這裏引用:Get the type in flex

參數數組是從給定函數內只訪問。

我不認爲你問的是可行的,除非你做了一些瘋狂的嘗試/抓住的事情,但如果參數是一個自定義的類,總是會失敗,所以它不是一個很好的解決方案。

另一種選擇是添加一些描述函數參數的自定義元數據。 [YourMeta(arg1="String",arg2="Array")]上面的每個功能,然後你得到使用ObjectUtil.getClassInfo(f).metadata找到該信息。這要求您將YourMeta添加到已編譯的元標記參數中。

可能有另一種方式通過未發佈到ASDoc的東西,但我不知道它。

+0

+1感謝您的元數據提示!我將通過傳遞慾望轉換類型作爲參數來解決這個問題。 – coma

相關問題