1

如果我有一个Table包含 functions 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
4

2 回答 2

3

Lua 中没有“成员函数”之类的东西。有一个简单的函数,它是一个。您可以将函数存储在任何地方,直接在全局表中,在您创建的其他表中,等等。函数(以及与此相关的所有 Lua 值)与它们碰巧存储的任何表都没有关联。

如果您想在某处存储一个函数(创建“引用”只不过是将其存储在某处),您可以。

仅供参考:直接将注册表用于 Lua “引用”不是一个好主意。我建议创建一个存储在注册表中特定插槽中的表以供您参考。当然,我会说在你正在做的事情中使用“参考”不是一个好主意。

于 2012-04-23T03:59:54.907 回答
0

您始终可以创建一个“绑定”函数作为闭包:

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

do_stuff_with(TableGetValue)
于 2012-04-26T05:06:20.230 回答