Tengo un programa que incorpora Lua e implementa una forma de búsqueda de funciones diferidas.Lua 5.2 LUA_GLOBALSINDEX Alternativa
La forma en que funcionaba en Lua 5.1, siempre que un símbolo no estaba definido, el intérprete llamaba a un gancho de función global que luego resolvería el símbolo.
Esta es una pequeña porción de código C que implementa esta función de búsqueda perezoso:
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);
ahora estoy tratando de mover el código de Lua 5.2 y se han topado con un problema.
En Lua 5.2, el valor LUA_GLOBALSINDEX ya no se define, por lo que esta línea de código ya no se compila.
//-- set global call back hook
lua_setmetatable(pLuaState, LUA_GLOBALSINDEX);
Hay una reference a este cambio a LUA_GLOBALSINDEX pero lamentablemente no ha ayudado.
¿Cuál sería la mejor manera de volver a escribir esta línea de código para que el intérprete llame al function_hook siempre que encuentre un símbolo no resuelto?
También puede usar 'lua_pushglobaltable (pLuaState)' en lugar de 'lua_rawgeti (pLuaState, LUA_RIDX_GLOBALS, LUA_REGISTRYINDEX)' para proteger su código de cambios en el futuro. También puede definir 'lua_pushglobaltable' para Lua 5.1 como' lua_pushvalue (L, LUA_GLOBALSINDEX) '. – lhf
+1 Esta solución funciona perfectamente. Muchas gracias. – jussij