Lua的5.2 LUA_GLOBALSINDEX替代 [英] Lua 5.2 LUA_GLOBALSINDEX Alternative
问题描述
我有嵌入Lua和实现了延迟功能查找形式的节目。
I have a program that embeds Lua and implements a form of lazy function lookup.
它在Lua 5.1,工作方式,每当一个符号是不确定的相互preTER会召唤一个全局函数钩子那么这将解决符号。
The way it worked in Lua 5.1, whenever a symbol was undefined the interpreter would call a global function hook that would then resolve the symbol.
这是实现这个懒功能查找C $ C $的c一小部分:
This is a small portion of C code that implemented this lazy function lookup:
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);
我现在正在试图将此code移动到Lua 5.2和所遇到的问题。
I'm now trying to move this code to Lua 5.2 and have run into a problem.
在Lua的5.2 LUA_GLOBALSINDEX值不再定义,因此这条线code不再编译。
In Lua 5.2 the LUA_GLOBALSINDEX value is no longer defined so this line of code no longer compiles.
//-- set global call back hook
lua_setmetatable(pLuaState, LUA_GLOBALSINDEX);
有一个参考这种变化给LUA_GLOBALSINDEX但遗憾的是它并没有帮助。
There is a reference to this change to LUA_GLOBALSINDEX but unfortunately it has not helped.
什么是重新写code的这一行有间preTER通话只要找到一个未解决的符号function_hook的最佳方式?
What would be the best way to re-write this one line of code to have the interpreter call the function_hook whenever it finds an unresolved symbol?
推荐答案
The global environment is now stored at a special index in the registry. Try:
//-- 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);
这篇关于Lua的5.2 LUA_GLOBALSINDEX替代的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!