在从我的 Lua 脚本调用的 C 函数中,我luaL_ref用来存储对函数的引用。但是,如果我随后尝试使用返回的整数索引从不是从同一状态派生的不同线程获取该函数,我得到的只是nil. 这是似乎可以证明这一点的最简单示例:
// Assumes a valid lua_State pL, with a function on top of the stack
int nFunctionRef = luaL_ref(pL, LUA_REGISTRYINDEX);
// Create a new state
lua_State* pL2 = luaL_newstate();
lua_rawgeti(pL2, LUA_REGISTRYINDEX, nFunctionRef);
const char* szType = luaL_typename(pL2, -1);
我发现它szType包含值'nil'。
我的理解是注册表在所有 C 代码之间全局共享,所以任何人都可以解释为什么这不起作用?
如果注册表不是以这种方式全局共享的,我怎样才能像我需要的那样从另一个脚本访问我的值?