Портирование на 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_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 месяцев. Глядя на документацию, я думаю, что это правильно, но хотел бы проверить.


person Jamin Grey    schedule 29.01.2012    source источник


Ответы (1)


Вместо lua_settable(L,LUA_GLOBALSINDEX); используйте lua_setglobal(L,T::className);. Это работает как в Lua 5.1, так и в 5.2.

person lhf    schedule 30.01.2012
comment
Да, но правильно ли я использую lua_setglobal()? lua_pushvalue(L, методы); lua_setglobal(L, T::имя_класса); - person Jamin Grey; 30.01.2012
comment
@ComServant, если T::className это char*, то да. Это не работает? - person lhf; 31.01.2012