關於lua熱更新
熱更新的原理
Lua的
require(modelname)
把一個lua文件加載存放到package.loaded[modelname]。
當我們加載一個模塊的時候,會先判斷是否在package.loaded中已存在,若存在則返回改模塊,不存在纔會加載(loadfile),防止重複加載。
package.loaded是一個Table,其中包含了全局表_G、默認加載的模塊(string, debug, package, io, os, table, math, coroutine)和用戶加載的模塊。
熱更新實現
function reload_module( module_name )
local old_module = package.loaded[ module_name ] or {}
package.loaded[ module_name ] = nil
require( module_name )
local new_module = package.loaded[ module_name ]
for k, v in pairs( new_module ) in
old_module[ k ] = v
end
package.loaded[ module_name ] = old_module
return old_module
end