來自C的Calling a Lua function是相當直接的,但有沒有辦法商店一個Lua函數的某處供以後使用?我想存儲用戶定義的Lua函數傳遞給我的C函數以用於事件,類似於Connect function works in wxLua。存儲一個Lua函數?
18
A
回答
23
檢查註冊表(luaL_ref()
)。它管理一個簡單的表格,讓你存儲任何Lua值(比如函數),並用一個簡單的整數從C中引用它。
0
最簡單的方法是讓你的函數獲取一個「名稱」和lua函數文本。然後在解釋器中創建一個表(如果它不存在),然後使用named參數將該函數存儲在表中。
在您的應用程序中,只保留與每個事件關聯的函數名稱列表。當事件觸發時,只需調用表中與列表中的名稱匹配的所有函數。
+0
Javier說這個功能已經存在,並且是Lua的參考表。 – 2009-02-10 17:38:38
13
基於Javier的回答,Lua有一個特殊的通用表,稱爲註冊表,可通過C API使用僞索引LUA_REGISTRYINDEX
訪問。您可以使用luaL_ref
功能存儲在註冊表中(包括Lua函數)喜歡的任何Lua的值,並接收返回,可用於從C是指一個整數:
// Assumes that the function you want to store is on the top of stack L
int function_index = luaL_ref(L, LUA_REGISTRYINDEX);
相關問題
- 1. 在Lua中定義一個函數?
- 2. 寫一個存儲函數返回一個rowid數組
- 3. Lua:存儲在數組中的變量
- 4. Lua:函數表
- 5. 在luabind存儲一個LUA類與父::對象
- 6. MonetDB存儲()函數
- 7. Lua合併函數
- 8. nodemcu Lua sqr函數
- 9. JS - 在一個變量中存儲一個函數的參數用於另一個函數
- 10. foreach數組函數存儲在一個變量?
- 11. mysql存儲函數參數
- 12. 用參數轉儲lua func
- 13. 如何調用由Oracle plsql中另一個存儲函數返回的名稱的存儲函數?
- 14. Lua函數在使用Luabind比較存儲的C++對象指針時崩潰
- 15. 將幾個Lua表保存在一個小數據庫中?
- 16. 在另一個函數中自動從列表中存儲變量的函數
- 17. 遞歸存儲函數
- 18. 存儲過程和函數
- 19. mySQL存儲函數問題
- 20. 存儲函數模板
- 21. 在fortran 90中存儲一個「函數指針」?
- 22. 從另一個PL/Python塊調用postgres PL/Python存儲函數
- 23. 執行函數存儲爲一個字符串在c + +
- 24. 存儲函數結果在一個向量中
- 25. 存儲到一個函數內的地圖
- 26. 創建一個線程來運行Postgres存儲函數
- 27. 從var中存儲的表達式定義一個函數
- 28. 找到的所有存儲過程調用一個函數
- 29. SQL存儲函數給出了一個錯誤
- 30. 函數名是如何存儲在一個IIFE?
Lua的裁判是太酷了 - 不能相信我一直在使用Lua而不知道這個功能。謝謝! – 2009-02-16 19:44:14