熱更新原理
Lua的 require(modelname) 把一個lua文件加載存放到package.loaded[modelname]。當我們加載一個模塊的時候,會先判斷是否在package.loaded中已存在,若存在則返回改模塊,不存在才會加載(loadfile),防止重復加載。package.loaded是一個Table,其中包含了全局表_G、默認加載的模塊(string, debug, package, io, os, table, math, coroutine)和用戶加載的模塊。
Lua熱更新
最簡單粗暴的熱更新就是將package.loaded[modelname]的值置為nil,強制重新加載:
這樣做雖然能完成熱更,但問題是已經引用了該模塊的地方不會得到更新, 因此我們需要將引用該模塊的地方的值也做對應的更新。