lua_pushstring(L, "php"); // 将要赋值的结果压入栈 lua_rawseti(L, -2, 4); // 赋值操作 -->lua_rawseti用法 lua_pushstring(L, "swift"); // 将要赋值的结果压入栈 lua_rawseti(L, -2, 8); // 赋值操作 -->lua_rawseti用法 lua_getglobal(L, "func_printarray");// 改变之后再调用打...
6.lua_rawseti lua_getglobal(L, "mytable") <== push mytable lua_pushstring(L, "abc") <== push value "abc" lua_rawseti(L, -2, 1) <== mytable[1] = "abc", pop value "abc" 1. 2. 3. void lua_rawseti (lua_State *L, int index, int n); 1. 等价于t[n] = v, 这里...
///这里可以看到如果再次unref的话t[ref]就保存就的是上上一次的key的值。 lua_rawseti(L, t, ref); /* t[ref] = t[FREELIST_REF] */ ///将ref压入栈 lua_pushinteger(L, ref); ///设置t[FREELIST_REF]为ref。 lua_rawseti(L, t, FREELIST_REF); /* t[FREELIST_REF] = ref */ } ...
首先 你函数名多打了个i 应该是lua_rawset lua的表 如果带有 __newindex 原表的话 在给表的值赋值的时候会按照原表规定的方法执行函数,而不是走普通的赋值路线 此时如果需要给表内的值赋值的话 只能通过这个函数赋值 函数名之前带有lua_ 表示这个是在宿主语言里操作的 比如C调用lua时 直接带有...
LUA_API void (lua_rawseti) (lua_State *L, int idx, int n);//等价于 t[n] = v,这里的 t 是指给定索引 index 处的一个值,而 v 是栈顶的值。函数将把这个值弹出栈。赋值操作是直接的;就是说,不会触发元方法。 lua_getglobal(L, "mytable") <== push mytable ...
voidlua_rawseti(lua_State *L, int index, int n) 操作: ele = Stack[index] value = Stack.top() Stack.pop() ele[n] = value 无返回值 栈-1, 栈顶将value弹出 不触发相应的元方法 6. 复制栈上元素并压入栈 voidlua_pushvalue(lua_State *L, int index) ...
(8)为简化将变量地址用作唯一键的用法,Lua5.2引入了两个新函数:lua_rawgetp和lua_rawsetp。这两个函数类似于lua_rawgeti和lua_rawseti,但它们使用C语言指针作为键。 22.3.2上值 (1)注册表提供了全局变量,而上值则实现了一种类似于C语言静态变量(只在特定的函数中可见)的机制。C语言函数中最多可以有255个上...
2)源码《lapi.c》lua_rawseti,设置Table中数组部分一个下标对应的数值: 图6 3)源码《ltable.c》luaH_newkey,Table添加一个键: 图7 4)源码《lvm.c》luaV_finishset,Table在一个Key或数组下标设置一个Value成功后: 图8 5)源码《lvm.c》luaV_execute部分代码,通过列表方式初始化Table数组部分内容的时候: ...
lua_rawseti# [-1, +0, e] void lua_rawseti (lua_State *L, int index, lua_Integer i); 等价于 t[i] = v, 这里的 t 是指给定索引处的表, 而 v 是栈顶的值。 这个函数会将值弹出栈。 赋值是直接的;即不会触发元方法。 lua_rawsetp# [-1, +0, e] void lua_rawsetp (lua_State *L...