У меня есть программа, которая встраивает Lua и реализует форму ленивого поиска функции.
Как он работал в Lua 5.1, когда символ был undefined, интерпретатор вызывал глобальный крючок функции, который затем разрешал бы символ.
Это небольшая часть кода 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, но, к сожалению, это не помогло.
Каким будет лучший способ переписать эту строку кода, чтобы интерпретатор вызывал функцию function_hook всякий раз, когда обнаруживал неразрешенный символ?