我有一个嵌入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);
Run Code Online (Sandbox Code Playgroud)
我现在正试图将此代码移至Lua 5.2并遇到问题.
在Lua 5.2中,不再定义LUA_GLOBALSINDEX值,因此这行代码不再编译.
//-- set global call back hook
lua_setmetatable(pLuaState, LUA_GLOBALSINDEX);
Run Code Online (Sandbox Code Playgroud)
LUA_GLOBALSINDEX 有一个对此更改的引用,但不幸的是它没有帮助.
重写这一行代码以便解释器在找到未解析的符号时调用function_hook的最佳方法是什么?
Mat*_*ttJ 15
//-- 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);
Run Code Online (Sandbox Code Playgroud)