当根据上一个key值算不出下一个key值时(其实这时候key的是多少并不重要,只要不为nil就行,因为为nil会返回table的第一个元素),lua_next返回0,结束循环。 2.lua_settable void lua_settable (lua_State *L, int index); 作一个等价于t[k] = v的操作, 这里t是一个给定有效索引index处的值,v指栈顶的...
如果__newindex指向一个函数的话,Lua就会调用那个函数,table,key,value会作为参数传递给函数。 可以使用rawset函数更新表的数据: mytable = setmetatable({key1 = "value1"}, { __newindex = function(mytable, key, value) rawset(mytable, key, "\""..value.."\"") end }) mytable.key1 = "new ...
lua_settable(lua_State* L, int index) 就是把表在lua堆栈中的值弹出来,index 是table 在堆栈中的位置,假如 table 在 -3, 则key 应该是 -2,value 是 -1 相当于 table[key] = value.
lua_settable(lua_State* L, int index) 就是把表在lua堆栈中的值弹出来,index 是table 在堆栈中的位置,假如 table 在 -3, 则key 应该是 -2,value 是 -1 相当于 table[key] = value.
调用luaV_settable设置表字段,其中: 调用luaV_fastset设置字段,如果失败则调用luaV_finishset,这里面就会使用元方法。 通过fasttm或luaT_gettmbyobj得到元方法后,判断它是否为函数,如果为函数则调用luaT_callTM,否则它应该是一个表,则继续这个过程。
LUA中table操作(主要是对它stack的理解) lua_getglobal( L, "myTable" ); // 假设我有这么个全局表,这个调用会将该表放在栈顶 lua_pushstring( L, "age" ); // "age"压到栈顶 lua_pushnumber( L, 29 ); // "29"压到栈顶 lua_settable( L, -3 ); // 到此,这个myTable现在处于-3位置,...
lua_settable(L, -3)<== mytable[1] = "abc", pop key & value lua_rawget: 用法同lua_gettable,但更快(因为当key不存在时不用访问元方法__index) lua_rawset: 用法同lua_settable,但更快(因为当key不存在时不用访问元方法__newindex)
//lua_settable(L, 1); //code9 lua_pushnumber(L, 19); lua_setfield(L, 1, "age"); //code10 //lua_pushstring(L, "age"); //lua_gettable(L, 1); code11 lua_getfield(L, 1, "age"); StackDump(L, 5); printf("setglobal age: %d\n", (int)lua_tointeger(L, -1)); ...
lua_settop(L, 0); //code5 lua_getglobal(L, "nameTable"); code6 //lua_pushstring(L, "sex"); //lua_gettable(L, -2); //lua_pushstring(L, "age"); //lua_gettable(L, -3); code7 lua_getfield(L, -1, "sex"); lua_getfield(L, -2, "age"); ...
function 类名:new(o) o = o or {} setmetatable(o,{__index = self}) return oend 或者 function 类名:new(o) o = o or {} setmetatable(o,self) self.__index = self return oend 相比之下,第二种写法可以多省略一个 table,另外有一点我觉得有必要说明的就是 lua 中的元方法...