У меня есть программа, которая встраивает 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);
Сейчас я пытаюсь перенести этот код на Lua 5.2 и столкнулся с проблемой.
В Lua 5.2 значение LUA_GLOBALSINDEX больше не определено, поэтому эта строка кода больше не компилируется.
//-- set global call back hook
lua_setmetatable(pLuaState, LUA_GLOBALSINDEX);
Существует ссылка на это изменение в LUA_GLOBALSINDEX, но, к сожалению, это не помогло.
Как лучше всего пере-написать эту одну строку кода, чтобы интерпретатор вызывал функцию_hook всякий раз, когда находит неразрешенный символ?