2009-02-10 96 views

回答

23

檢查註冊表(luaL_ref())。它管理一個簡單的表格,讓你存儲任何Lua值(比如函數),並用一個簡單的整數從C中引用它。

+2

Lua的裁判是太酷了 - 不能相信我一直在使用Lua而不知道這個功能。謝謝! – 2009-02-16 19:44:14

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);