移植到Lua 5.2,遇到LUA_GLOBALSINDEX问题。

在代码示例http://lua-users.org/wiki/SimplerCppBinding中,有以下代码:

lua_pushstring(L, T::className);
lua_pushvalue(L, methods);
lua_settable(L, LUA_GLOBALSINDEX);  //<--- 在 Lua 5.2 中已移除 LUA_GLOBALSINDEX

lua_pushliteral(L, "__metatable");
lua_pushvalue(L, methods);
lua_settable(L, metatable);

在 Lua 5.2 中,LUA_GLOBALSINDEX 已不再存在。代之以 lua_setglobal()和lua_getglobal()。


我正确地认为:

lua_pushvalue(L, methods);
lua_setglobal(L, T::className);

是替换以下代码的正确方式吗?

lua_pushstring(L, T::className);
lua_pushvalue(L, methods);
lua_settable(L, LUA_GLOBALSINDEX);

我对 Lua 还太新,不确定,已经8个月没用它了。看着文档,我_认为_这是正确的,但想得到确认。

原文链接 https://stackoverflow.com/questions/9057943

点赞
stackoverflow用户107090
stackoverflow用户107090

可以使用lua_setglobal(L,T::className);代替lua_settable(L,LUA_GLOBALSINDEX);,这在Lua 5.1和5.2中都适用。

2012-01-30 10:23:55