如果我有一个包含函数Table
,getValue()
等的全局表setValue()
,我可以存储对Table.getValue
的引用,还是必须存储引用?到Table
然后调用成员函数?
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
答案 0 :(得分:3)
Lua中没有“成员函数”这样的东西。只有一个函数,它是值。您可以在任何地方,直接在全局表中,在您创建的其他表中存储函数等。函数(以及所有Lua值)与它们碰巧存储的任何表都没有关联。
如果你想在某个地方存储一个功能(并且创建一个“引用”只不过是将它存储在某处),你可以。
仅供参考:直接将注册表用于Lua“引用”并不是一个好主意。我建议创建一个存储在注册表中特定插槽中的表,以用于引用。当然,我会说使用“引用”来表示你正在做的事情并不是一个好主意。
答案 1 :(得分:0)
您始终可以创建一个“绑定”函数作为闭包:
local tbl=Table
local function TableGetValue(key)
return tbl:getValue(key)
end
do_stuff_with(TableGetValue)