Lua - 对表中函数的引用

Lua - References to Functions Within Tables

本文关键字:函数 引用 Lua      更新时间:2023-10-16

如果我有一个全局表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

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

如果你想在某处存储一个函数(而创建一个"引用"只不过是把它存储在某个地方),你可以。

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

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

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