В функции C, вызванной из моего скрипта Lua, я использую luaL_ref
для хранения ссылки на функцию. Однако если я затем попытаюсь использовать возвращенный целочисленный индекс для извлечения этой функции из другого потока, который не получен из того же состояния, все, что я получаю, это nil
. Вот самый простой пример, который, кажется, демонстрирует это:
// Assumes a valid lua_State pL, with a function on top of the stack
int nFunctionRef = luaL_ref(pL, LUA_REGISTRYINDEX);
// Create a new state
lua_State* pL2 = luaL_newstate();
lua_rawgeti(pL2, LUA_REGISTRYINDEX, nFunctionRef);
const char* szType = luaL_typename(pL2, -1);
Я обнаружил, что szType
содержит значение 'nil'.
Насколько я понимаю, реестр был распределен между всеми кодами C на глобальном уровне, поэтому кто-нибудь может объяснить, почему это не работает?
Если реестр таким образом не используется глобально, как я могу получить доступ к своим значениям, как мне нужно, из другого скрипта?