Lua - 表中函数的引用

时间:2012-04-23 02:30:52

标签: c++ lua luajit

如果我有一个包含函数TablegetValue()等的全局表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

2 个答案:

答案 0 :(得分:3)

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

如果你想在某个地方存储一个功能(并且创建一个“引用”只不过是将它存储在某处),你可以。

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

答案 1 :(得分:0)

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

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

do_stuff_with(TableGetValue)