我正在將一個函數傳遞給另一個運行良好的函數。假設函數「inner」被傳遞給「outer」函數。我的問題是,我希望函數「outer」能夠檢查函數「inner」和它們的類型中是否有任何參數。我將內部函數用作回調函數,因此具有特定類型的一個參數非常重要。我想盡早地發現任何問題,所以需要「外部」功能來檢查。Flex:傳遞函數並檢查參數
如何檢查函數的參數?這在Flex中可能嗎?
感謝
我正在將一個函數傳遞給另一個運行良好的函數。假設函數「inner」被傳遞給「outer」函數。我的問題是,我希望函數「outer」能夠檢查函數「inner」和它們的類型中是否有任何參數。我將內部函數用作回調函數,因此具有特定類型的一個參數非常重要。我想盡早地發現任何問題,所以需要「外部」功能來檢查。Flex:傳遞函數並檢查參數
如何檢查函數的參數?這在Flex中可能嗎?
感謝
在編譯時
事實上它可能有編譯時檢查。這取決於你願意做出多大的飛躍。爲此,您必須在編寫代碼時使用haXe代替ActionScript,並在編譯時使用targeting the Flash platform。 haXe function types on Devboy's blog有很好的閱讀。
在運行時
如果你不想去那麼遠,這裏是如何做到這一點在AS:你必須使用describeType()功能。假設你有一個測試類像這樣的:
public class TestClass {
public function test(s:String):void {}
}
現在,我們可以通過書面形式獲取有關其功能的信息:
var info:XML = describeType(TestClass);
某處在該XML對象將有看起來像這樣的節點:
<method name="test" declaredBy="net.riastar.test::TestClass" returnType="void">
<parameter index="1" type="String" optional="false"/>
</method>
有它!所有你需要的信息來做你的檢查。 但是這種方法有一個很大的缺陷:describeType
方法效率不高。如果你必須這麼做,它會減慢你的應用程序。您可以使用緩存策略來避免這種情況。或者看看as3-commons-reflect項目,它會照顧你的緩存。
它是否必須在編譯時或運行時檢查好嗎? – RIAstar
理想的編譯時間,但我不認爲這是可能的。我認爲運行時間很好。我只想盡快解決任何問題。 – RNJ