Lua - 在表中引用函数

如果我有一个全局表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); // 从堆栈中弹出"Table"

原文链接 https://stackoverflow.com/questions/10274150

点赞
stackoverflow用户734069
stackoverflow用户734069

在 Lua 中,不存在所谓的“成员函数”。实际上,只有一个函数,它是一个。可以将函数存储在任何地方,无论是直接存储在全局表中,还是在其他自己创建的表中。函数(以及所有其他 Lua 值)与任何存储它们的表格没有关联。

如果要存储一个函数(创建“引用”本质上也是存储它),可以这样做。

注意:直接使用 Lua 注册表存储“引用”不是一个好主意。建议在注册表中的特定槽位创建一个表格,将其用于存储引用。当然,我认为将“引用”用于你正在做的事情本身就不是个好主意。

2012-04-23 03:59:54
stackoverflow用户161144
stackoverflow用户161144

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

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

do_stuff_with(TableGetValue)
2012-04-26 05:06:20