2012-01-29 120 views
6

在代碼示例:http://lua-users.org/wiki/SimplerCppBinding移植到Lua 5.2,LUA_GLOBALSINDEX麻煩

有代碼:

lua_pushstring(L, T::className); 
lua_pushvalue(L, methods); 
lua_settable(L, LUA_GLOBALSINDEX); //<--- LUA_GLOBALSINDEX removed in Lua 5.2 

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個月。看文檔,我是想着這是正確的,但想驗證。

回答

4

而不是lua_settable(L,LUA_GLOBALSINDEX);使用lua_setglobal(L,T::className);。這適用於Lua 5.1和5.2。

+0

是的,但我正確使用lua_setglobal()嗎? lua_pushvalue(L,methods); lua_setglobal(L,T :: className); – 2012-01-30 16:08:55

+0

@ComServant,如果'T :: className'是'char *',那麼是的。它不工作? – lhf 2012-01-30 22:04:03