2010-05-11 28 views

Trả lời

13

Nếu (a) các kịch bản Lua đang modules, và (b) các module không ảnh hưởng đến globals hoặc bảng ngoài phạm vi của các module, bạn có thể sử dụng package.loaded.????? = nil gây require để tải lại các module:

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

Tương tự, nếu các tập lệnh non-module hoạt động tốt ở chỗ chúng (a) chỉ xác định một bảng duy nhất và (b) không ảnh hưởng đến hình cầu hoặc các bảng khác, thì việc tải lại tập lệnh cũng sẽ hoạt động.

0

Chỉ cần sử dụng riêng include(filename) chức năng của bạn:

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 
Các vấn đề liên quan