与"debug.setupvalue()"的功能相对,将函数"f"("Closure")的第"up"个"upvalue"的值设置为"value"。 函数返回被设置的"upvalue"的名字。如果指定的"up"索引越界,则返回"nil"。 注:获取与设置"upvalue"与"Closure"是否被调用(是否在调用栈上)无关。]] -- "Closure"。 function newCounter () local n = ...
debug.setupvalue (counter,2,10) end i = i + 1 end -- if until not name print(counter())执行以上代码输出结果为:1 2 index 1 k = 1 index 2 n = 2 11在以上实例中,计数器在每次调用时都会自增1。实例中我们使用了 getupvalue 函数查看局部变量的当前状态。我们可以设置局部变量为新值。实例中...
getupvalue(counter, i) if name then print ("index", i, name, "=", val) if(name == "n") then debug.setupvalue (counter,2,10) end i = i + 1 end -- if until not name print(counter()) 执行以上代码输出结果为:1 2 index 1 k = 1 index 2 n = 2 11在以上实例中,计数器在...
name, val = debug.getupvalue(counter, i) if name then print ("index", i, name, "=", val) if(name == "n") then debug.setupvalue (counter,2,10) end i = i + 1 end -- if until not name print(counter()) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15....
debug.setupvalue(func, i, value) return"upvalue" end end -- 省略 end _ENV表中查找 如果在普通的上值中还是没有找到,我们就去_ENV表中查找。首先调用_getvarvalue获取到_ENV表,注意这里的isenv标志为true。如果如果找到了_ENV表且表中存在名为name的变量,就修改其值为value,然后返回"global"以指示是修改...
debug.getinfo 函数获得函数的当前表。 示例二 在调试过程中,我们常常需要查看或修改函数局部变量的值。因此,我们可以用 getupvalue 获得变量的值,用 setupvalue 修改变量的值。示例如下: function newCounter () local n = 0 local k = 0 return function () k = n n = n + 1 return n end end ...
name, val = debug.getupvalue(counter, i) if name then print ("index", i, name, "=", val) if(name == "n") then debug.setupvalue (counter,2,10) end i = i + 1 end -- if until not name print(counter()) 执行以上代码输出结果为: ...
实例中,在设置前 n 的值为 2,使用 setupvalue 函数将其设置为 10。现在我们调用函数,执行后输出为 11 而不是 3。 调试类型 命令行调试 图形界面调试 命令行调试器有:RemDebug、clidebugger、ctrace、xdbLua、LuaInterface - Debugger、Rldb、ModDebug。 图形界调试器有:SciTE、Decoda、ZeroBrane Studio、ak...
上图中函数InitClosure调用了的lua_setupvalue,lua_getupvalue为设置与获取UpValue的函数,我们讲Lua闭包的时候再讲。另外调用了luaF_newCclosure创建C语言闭包,见源码《lfunc.c》: 图8 作用就是创建出一个CClosure,然后根据参数中UpValue的数量分配内存。CClosure中的Lua_CFunction f变量可理解为是一个指向函数地址...
debug.setupvalue(NewFunction, i, OldValue) -- 其他类型数据有改变,也要用旧的 end else ResetENV(value, name, "UpdateUpvalue", Deepth.." ") -- 对新添加的upvalue设置正确的环境表 end end end 这是替换upvalue的函数,替换fucntion的函数相信很多项目都有写过,这里不再粘贴,而且不同的项目相信还有一些...