将 Lua 5.1 线程代码移植到 5.2 版本。

我已经有了以下代码,它在 Lua 5.1 中运作良好并且正好满足我的需求,但是尝试将其移到 5.2(由于缺少 LUA_GLOBALSINDEX),我遇到了问题... 有人能告诉我在 Lua 5.2 中与下面代码等效的是什么吗?

thread->L = lua_newthread( G );

lua_pushvalue( G, -1 );

thread->index = luaL_ref( G, LUA_REGISTRYINDEX );

lua_newtable( thread->L );

lua_newtable( thread->L );

lua_pushliteral( thread->L, "__index" );

-- 问题在这里...没有了 LUA_GLOBALSINDEX,无法找到相等的 push 方法。
lua_pushvalue( thread->L, LUA_GLOBALSINDEX );

lua_settable( thread->L, -3 );

lua_setmetatable( thread->L, -2 );

-- 问题在这里...没有了 LUA_GLOBALSINDEX,无法找到相等的 replace 方法。
lua_replace( thread->L, LUA_GLOBALSINDEX );

在 Lua 5.2 中应该如何解决?

谢谢!

点赞
用户869951
用户869951

你应该使用 lua_pushglobaltable(thead->L)(或者必要时使用lua_rawgeti(thread->L, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS))。这在 Lua 5.2 LUA_GLOBALSINDEX Alternative 的被接受的回答中有解释。

2014-01-14 04:16:42