Lua スクリプトから呼び出される C 関数で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 コードでグローバルに共有されていたので、なぜこれが機能しないのか説明できますか?
レジストリがそのようにグローバルに共有されていない場合、別のスクリプトから必要なように値にアクセスするにはどうすればよいですか?