我需要生成函數名稱,然後調用它。 是否可以像php <?php call_user_func_array(array($object, $method));?>
那樣做?我如何動態調用Vala方法?
0
A
回答
2
有四個選項:
讓你想這樣的信號調用的方法。信號可以通過名稱GLib.Signal.emit_by_name (g_signal_emit_by_name)來命名。該調用來自GLib模式,但其他支持信號的模式可能有類似的方法。
在代碼中手動創建代表對象的靜態表/散列表。主要優點是它是類型安全的。缺點是你必須在兩個地方添加每種方法。它也將在所有的vala模式下工作。
另一種方法是告訴vala編譯器構建「gir」綁定並使用GObject Introspection庫來調用函數。這要複雜得多,但編譯器會爲你保留可用方法的列表。該方法特定於GLib模式。
最後一個選項是使用GLib的GLib.Module.symbol (g_module_symbol)函數來查找符號。您需要知道符號的「錯位」C名稱,它不會是類型安全的。你必須準確地匹配參數類型,並且介意調用者應該去的地方。它避免了GIR的開銷,但與GIR不同的是它不能告訴你哪些方法存在,只給你一個特定的方法。在GtkBuilder中連接信號時使用此方法。我提到了GLib的功能,但
POSIX.dlsym
可以用同樣的方法。
相關問題
- 1. 如何進行動態方法調用?
- 2. GWT:使用JSNI機方法:如何調用方法動態
- 3. 調用動態方法
- 4. 動態方法調用
- 5. 動態方法調用
- 6. 「動態」方法調用
- 7. 動態調用類方法
- 8. 動態方法調用?
- 9. 如何動態調用動態對象上的方法?
- 10. 調用非靜態方法動態
- 11. 我如何使actionListener方法動態
- 12. Bean方法調用:動態的方式
- 13. 如何從靜態方法調用非靜態方法android
- 14. 如何從靜態方法調用非靜態方法
- 15. 如何從靜態方法調用非靜態方法?
- 16. 如何從一個靜態方法調用非靜態方法
- 17. 如何從靜態方法調用非靜態方法?
- 18. Vala是否支持自我調用?
- 19. 我如何動態調整
- 20. 使用反射動態調用方法
- 21. IllegalAccessException當使用調用動態方法
- 22. 調試.NET動態方法
- 23. JUnit動態方法調度?
- 24. Groovy方法動態調用靜態方法
- 25. 如何調用靜態方法的類
- 26. 如何從模態調用父方法
- 27. 如何調用類/靜態方法
- 28. 如何調用類的靜態方法?
- 29. 如何從靜態方法調用startActivityForResult?
- 30. 如何從靜態方法調用getSupportFragmentManager?
我認爲第一種選擇最適合我。非常感謝您的幫助! –