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, 这里...
首先 你函数名多打了个i 应该是lua_rawset lua的表 如果带有 __newindex 原表的话 在给表的值赋值的时候会按照原表规定的方法执行函数,而不是走普通的赋值路线 此时如果需要给表内的值赋值的话 只能通过这个函数赋值 函数名之前带有lua_ 表示这个是在宿主语言里操作的 比如C调用lua时 直接带有...
void lua_rawgeti(Lua_State *L,int index,int key); void lua_rawseti(Lua_State *L,int index,int key); //假设t为整数, //lua_rawgeti(L,t,key)等价于 lua_pushnumber(L,key); lua_rawget(L,t); //lua_rawseti(L,t,key)等价于 lua_pushnumber(L,key); lua_insert(L,-2); lua_rawset(...
注意到,Lua代码是不需要再创建新的“整数”的,它们是直接从常量表(K表)载入的,所以pushnumber会拖慢一点速度,其次,lua_rawseti会比luaH_setint多做一些检查,除了这两点以外,还有一个很容易忽视的地方是API调用开销:因为Lua是在DLL里面的,因此API调用相对较慢,如果静态链接的话,对其他测试来说,结果影响不大,...
(8)为简化将变量地址用作唯一键的用法,Lua5.2引入了两个新函数:lua_rawgetp和lua_rawsetp。这两个函数类似于lua_rawgeti和lua_rawseti,但它们使用C语言指针作为键。 22.3.2上值 (1)注册表提供了全局变量,而上值则实现了一种类似于C语言静态变量(只在特定的函数中可见)的机制。C语言函数中最多可以有255个上...
③LUA_API void (lua_rawseti) (lua_State *L, int idx, lua_Integer n); 注意对应的lua_rawset函数 设置索引号n的数组值。 这个函数会将值弹出栈。 赋值是直接的;即不会触发元方法,效率高。 3.C++读取Lua中数组 ①Lua中数组 global_c_read_array = {5,6.78,"array string"} ...
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示意图 7.2 字典传递 字典的传递同样需要先入栈一个Table: lua_newtable(self.state); 然后对要传递的字典进行遍历,并通过lua_setfield方法将元素设置到Table中。如: [dict enumerateKeysAndObjectsUsingBlock:^(NSString*_Nonnull key,id _Nonnull obj,BOOL*_Nonnull stop){NSInteger value=[obj inte...