在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
如果你看了LUA的文档,那么就应该很清楚LUA与C交互数据时都是用到LUA中所谓的stack。那么当我调用lua_open函数之后栈是什么样的呢?空的(luaopen_base等会往栈上加进一些东西)。那么至于如何操作栈上的数据,我想官方文档上已经说得很清楚了,不过最初我对于栈的顺序有一些迷糊,所以就说说这个。现在假如我有如下的一段代码: 代码:
lua_State* L = lua_open();
lua_pushnumber( L, 211 ); lua_pushnumber( L, 2222 ); lua_newtable( L ); lua_close( L );
代码:
// 代码A
lua_getglobal( L, "myTable" ); // 获取要设置值的table lua_pushstring( L, "hp" ); // "hp"在栈上的位置为-1 lua_pushnumber( L, 211 ); // "hp"在栈上的位置变为-2,而211则是-1 lua_settable( L, -3 ); // 值被正确的设置到全局变量(表)的myTable中
代码:
lua_pushnumber( L, 211 );
lua_setglobal( L, "hp" );
代码:
#define lua_setglobal(L,s) /
(lua_pushstring(L, s), lua_insert(L, -2), lua_settable(L, LUA_GLOBALSINDEX))
代码:
lua_pushnumber( L, 211 );
lua_pushstring( L, "hp" ); lua_insert( L, -2 ); // 这一步看上去或许比较诡异,实际上是把-1的值放到lua_insert的第二个参数所指的位置,然后这个位置后面的参数往上移 //这里实际上最终结果就是-1和-2对调,但从逻辑上并不是对调 lua_settable( L, LUA_GLOBALSINDEX ); // 这里为什么不用lua_rawset?我认为是有原因的^@^
代码:
lua_pushstring( L, "hp" );
lua_gettable( L, LUA_GLOBALSINDEX );
代码:
lua_pushstring( L, "hp" );
lua_pushnumber( L, 211 ); lua_settable( L, LUA_GLOBALSINDEX );
|
请发表评论