2012-04-23 47 views
1

如果我有一個全局表Table具有功能getValue()setValue(),等我可以存儲Table.getValue參考或做我必須存儲Table的引用,然後調用成員函數?的Lua - 引用函數中的表

lua_getglobal(L, "Table"); 

lua_getfield(L, -1, "getValue"); 
getValueRef = luaL_ref(L, LUA_REGISTRYINDEX); 

lua_getfield(L, -1, "setValue"); 
setValueRef = luaL_ref(L, LUA_REGISTRYINDEX); 

lua_pop(L, 1); // Pop "Table" off of the stack 

回答

3

在Lua中沒有這樣的「成員函數」。有一個簡單的功能,這是一個。您可以將函數存儲在任何地方,直接存儲在全局表中,存儲在您創建的其他表格中。等等。函數(以及所有Lua值)與它們存儲在其中的任何表沒有關聯。

如果你想要在某處存儲一個函數(並且創建一個「引用」只不過是將其存儲在某個地方),你可以。

僅供參考:它不是一個好主意,直​​接使用註冊表的Lua「參考」。我建議創建一個表,您將其存儲在註冊表中的特定插槽中以供您參考。當然,我認爲使用「引用」來表達你正在做的事情並不是一個好主意。

+0

我曲解LUA手動從來沒有停止給我帶來驚喜的能力。謝謝。 – Mastax 2012-04-26 02:43:56

0

你總是可以創建一個「綁定」功能封閉:

local tbl=Table 
local function TableGetValue(key) 
    return tbl:getValue(key) 
end 

do_stuff_with(TableGetValue)