什么是在运行时重新加载lua脚本的方法?

时间:2010-05-11 15:39:18

标签: scripting lua

我想在运行时重新加载lua脚本。有什么方法可以做到这一点?你只需要重新初始化lua系统,然后重新读取所有的lua文件吗?

2 个答案:

答案 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