15
私はLuaを組み込み、遅延型関数ルックアップの形式を実装しています。ルア5.2 LUA_GLOBALSINDEXオルタナティブ
Lua 5.1では、シンボルが定義されていないときはいつでも、インタープリタはグローバル関数フックを呼び出してシンボルを解決します。私は今のLua 5.2にこのコードを移動しようとしていると問題に遭遇してきた
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);
:
これは、この怠惰な機能の検索を実装したCコードの小さな部分があります。
Lua 5.2では、LUA_GLOBALSINDEX値は定義されなくなり、このコード行はコンパイルされなくなりました。
//-- set global call back hook
lua_setmetatable(pLuaState, LUA_GLOBALSINDEX);
はLUA_GLOBALSINDEXにこの変更にreferenceありますが、残念ながらそれは助けていません。
未解決のシンボルが見つかるたびにインタープリタがfunction_hookを呼び出すようにするには、この1行のコードを書き直すにはどうすればよいでしょうか?
をまた代わりに '' lua_rawgeti(pLuaState、LUA_RIDX_GLOBALS、LUA_REGISTRYINDEX) '将来の変更からあなたのコードを保護するためのlua_pushglobaltable(pLuaStateを)'を使用することができます。また、lua 5.1の 'lua_pushglobaltable'を' lua_pushvalue(L、LUA_GLOBALSINDEX) 'として定義することもできます。 – lhf
+1このソリューションは完全に機能します。どうもありがとう。 – jussij