我想在运行时重新加载lua脚本。有什么方法可以做到这一点?你只需要重新初始化lua系统,然后重新读取所有的lua文件吗?
答案 0 :(得分:13)
如果(a)Lua脚本在modules中,并且(b)模块不影响模块范围之外的全局变量或表,则可以使用package.loaded.????? = nil
导致{{ 1}}重新加载模块:
require
同样,如果non-module脚本表现良好,他们(a)只定义一个表,(b)不影响全局或其他表,那么只需重新加载脚本也可以正常工作
答案 1 :(得分:1)
只需使用您自己的include(filename)
功能:
function evalfile(filename, env)
local f = assert(loadfile(filename))
return f()
end
function eval(text)
local f = assert(load(text))
return f()
end
function errorhandler(err)
return debug.traceback(err)
end
function include(filename)
local success, result = xpcall(evalfile, errorhandler, filename)
--print(string.format("success=%s filename=%s\n", success, filename))
if not success then
print("[ERROR]\n",result,"[/ERROR]\n")
end
end
function include_noerror(filename)
local success, result = xpcall(evalfile, errorhandler, filename)
--print(string.format("success=%s filename=%s\n", success, filename))
end