Lua 5.2 LUA_GLOBALSINDEX替代方案

我有一个嵌入Lua的程序,并实现了一种惰性函数查找。

它在Lua 5.1中的工作方式,只要符号未定义,解释器就会调用一个全局函数钩子,然后解析符号。

这是实现这个惰性函数查找的C代码的一小部分:

int function_hook(lua_State *pLuaState) { // do the function lookup here .... return 1; } ...... //-- create table containing the hook details lua_newtable(pLuaState); lua_pushstring(pLuaState, "__index"); lua_pushcfunction(pLuaState, function_hook); lua_settable(pLuaState, -3); //-- set global index callback hook lua_setmetatable(pLuaState, LUA_GLOBALSINDEX); 

我现在正试图将此代码移至Lua 5.2并遇到问题。

在Lua 5.2中,不再定义LUA_GLOBALSINDEX值,因此这行代码不再编译。

 //-- set global call back hook lua_setmetatable(pLuaState, LUA_GLOBALSINDEX); 

LUA_GLOBALSINDEX有一个对此更改的引用 ,但不幸的是它没有帮助。

重写这一行代码以便解释器在找到未解析的符号时调用function_hook的最佳方法是什么?

全局环境现在存储在注册表中的特殊索引处 。 尝试:

 //-- get global environment table from registry lua_rawgeti(pLuaState, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS); //-- create table containing the hook details lua_newtable(pLuaState); lua_pushstring(pLuaState, "__index"); lua_pushcfunction(pLuaState, function_hook); lua_settable(pLuaState, -3); //-- set global index callback hook lua_setmetatable(pLuaState, -2); //-- remove the global environment table from the stack lua_pop(pLuaState, 1);