GETUPVAL将B为索引的upvalue的值装载到A寄存器中。SETUPVAL将A寄存器的值保存到B为索引的upvalue中。 GETTABUP将B为索引的upvalue当作一个table,并将C做为索引的寄存器或者常量当作key获取的值放入寄存器A。SETTABUP将A为索引的upvalue当作一个table,将C寄存器或者常量的值以B寄存器或常量为key,存入t
--[[ debug.upvaluejoin(f1, n1, f2, n2) 让"Closure""f1"的第"n1"个"upvalue"引用"Closure""f2"的第"n2"个"upvalue"。 debug.upvalueid(f, n) 返回指定"Closure""f"的第"n"个"upvalue"的标识符 (一个轻量用户数据,每个"upvalue"的标识符唯一)。 这个标识符可以让程序检查两个不同的"Closure"是...
实例中我们使用了 getupvalue 函数查看局部变量的当前状态。我们可以设置局部变量为新值。实例中,在设置前 n 的值为 2,使用 setupvalue 函数将其设置为 10。现在我们调用函数,执行后输出为 11 而不是 3。调试类型命令行调试 图形界面调试命令行调试器有:RemDebug、clidebugger、ctrace、xdbLua、LuaInterface - ...
1、getf 调用时,var2、var3 这两个变量作为 f1, f2 的 upvalue,它们还处在 getf 的栈上,这时候它们会被放在 lua_State 的 openupval 链表中。 2、getf 调用后,它的栈要被收回的,这时候 lua vm 会调用 luaF_close 来关闭getf栈上被引用的 upvalue,最终是 luaF_closeupval 这个函数执行: voidluaF...
lua_getallocf lua_Alloc lua_getallocf (lua_State *L, void **ud); 返回给定状态机的内存分配器函数。如果ud不是NULL,Lua 把调用lua_newstate时传入的那个指针放入*ud。 lua_getfenv void lua_getfenv (lua_State *L, int index); 把索引处值的环境表压入堆栈。
6.getmetatable(value): 把给定索引指向的值的元表压入堆栈。如果索引无效,或是这个值没有元表,函数将返回 0 并且不会向栈上压任何东西。 7.getregistry(): 返回注册表表,这是一个预定义出来的表, 可以用来保存任何 C 代码想保存的 Lua 值。 8.getupvalue (f, up) 此函数返回函数 f 的第 up 个上值...
lua_getupvalue# [-0, +(0|1), –] const char *lua_getupvalue (lua_State *L, int funcindex, int n); 获取一个闭包的上值信息。 (对于 Lua 函数,上值是函数需要使用的外部局部变量, 因此这些变量被包含在闭包中。) lua_getupvalue 获取第 n 个上值, 把这个上值的值压栈, 并且返回它的名字。
在以实例中,我们使用到了 debug 库的 traceback 和 getinfo 函数, getinfo 函数用于返回函数信息的表。 另一个实例 我们经常需要调试函数的内的局部变量。我们可以使用 getupvalue 函数来设置这些局部变量。实例如下: function newCounter () local n = 0 ...
U UpValue。上值。 K constant。常量。 G global。全局。 例如,指令USETS是为一个UpValue设置字符串值;指令TGETV是获取一个表结构中指定索引的数据。 BCMode ma、mb、mc展开后是一个BCMode类型常量。它们的定义如下: typedefenum{ BCMnone=0, BCMdst, ...
问使用getinfo / getlocal / getupvalue获取Lua中的所有变量用于调试EN改BUG改到脚本里,郁闷了,没法...