15
我有一個嵌入Lua並實現懶惰函數查找的程序。Lua 5.2 LUA_GLOBALSINDEX備選
它在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);
有一個reference這種變化LUA_GLOBALSINDEX但遺憾的是它並沒有幫助。
重寫這一行代碼讓解釋器在發現一個未解析符號時調用function_hook會是什麼?
你也可以使用'lua_pushglobaltable(pLuaState)',而不是'lua_rawgeti(pLuaState,LUA_RIDX_GLOBALS,LUA_REGISTRYINDEX)'從未來變化屏蔽你的代碼。你也可以將Lua 5.1的'lua_pushglobaltable'定義爲'lua_pushvalue(L,LUA_GLOBALSINDEX)'。 – lhf 2012-04-10 11:40:02
+1此解決方案完美運作。非常感謝。 – jussij 2012-04-10 13:36:05