2012-01-29 12 views
6

W przykładzie kodu: http://lua-users.org/wiki/SimplerCppBindingPrzenoszenie do Lua 5.2 LUA_GLOBALSINDEX kłopoty

Jest to kod:

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); 

w Lua 5.2 LUA_GLOBALSINDEX już nie istnieje. Zamiast tego ma lua_setglobal() i lua_getglobal().


mam rację sądząc, że:

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

... jest prawidłowy dla:

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

jestem zbyt nowe dla Lua, aby mieć pewność, I haven używał go przez 8 miesięcy. Patrząc na dokumentację, jestem myślenie jest to poprawne, ale chciałbym weryfikacji.

Odpowiedz

4

Zamiast lua_settable(L,LUA_GLOBALSINDEX); użyj lua_setglobal(L,T::className);. Działa to zarówno w Lua 5.1, jak i 5.2.

+0

Tak, ale czy poprawnie używam lua_setglobal()? lua_pushvalue (L, metody); lua_setglobal (L, T :: className); –

+0

@ComServant, jeśli 'T :: className' to" char * ", to tak. Czy to nie działa? – lhf