Lua學習之熱更新

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章