2010-05-11 32 views

回答

13

若(a)的Lua腳本是modules,和(b)模塊不會影響全局或表格模塊的範圍之內,你可以使用package.loaded.????? = nil造成require重新加載模塊:

> require "lsqlite3" 
> =sqlite3.version 
function: 0x10010df50 
> sqlite3.version = "33" 
> return sqlite3.version 
33 
> require "lsqlite3" 
> return sqlite3.version 
33 
> package.loaded.lsqlite3 = nil 
> return sqlite3.version 
33 
> require "lsqlite3" 
> return sqlite3.version 
function: 0x10010c2a0 
> 

同樣,如果non-module腳本的表現良好,它們(a)只定義單個表,並且(b)不影響全局變量或其他表,然後重新加載腳本也可以。

0

只需使用自己的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 
相關問題