gpt4 book ai didi

c - Lua 5.2 LUA_GLOBALSINDEX 替代方案

转载 作者:太空狗 更新时间:2023-10-29 16:32:32 28 4
gpt4 key购买 nike

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

它在 Lua 5.1 中的工作方式,每当一个符号未定义时,解释器将调用一个全局函数 Hook ,然后解析该符号。

这是实现惰性函数查找的一小部分 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);

有一个reference对 LUA_GLOBALSINDEX 的这种更改,但不幸的是它没有帮助。

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

最佳答案

global environment现在存储在 registry 中的一个特殊索引中.尝试:

//-- 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);

关于c - Lua 5.2 LUA_GLOBALSINDEX 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10087226/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com