用require函數(shù)只能加載一次,因為它的特性是:
1流译、require函數(shù)會搜索目錄加載文件
2节沦、require會判斷是否文件已經(jīng)加載避免重復(fù)加載同一文件姨涡。
而這個特性二,雖然我們可能知道這兩個特性,但是潛意識里面常常把這個特性二給忽視掉了.
直到哪天我們需要反復(fù)加載同一個lua文件,但是沒有實現(xiàn)自己想要效果的時候,才會發(fā)現(xiàn)這個特性二的存在感特別強!
也許有的小伙伴,會有疑問,為什么要反復(fù)加載啊?加載一次不就能用了么?
當(dāng)我有一些特殊的需求的時候,就可能會需要反復(fù)加載某個lua文件,例如我的文件lua文件動態(tài)地改變了,或者一些其他特殊原因.
那么,如何實現(xiàn)用require在我特定需求的時候可以反復(fù)加載一個lua文件?
答案是:二次加載前加這一句package.loaded[luafile] = nil就ok了
例如我們需要反復(fù)地required(‘test.lua’),那么第二次加載時的代碼如下:
package.loaded[‘test.lua’] = nil
required(‘test.lua’)
參考資料:
http://baike.baidu.com/view/8751804.htm?fr=aladdin 關(guān)于required函數(shù)的特性
http://www.cnblogs.com/Wilson-Loo/p/3301989.html Lua 腳本重啟 機制
http://7301766.blog.163.com/blog/static/144633559201101904135456/ LUA modue require package 區(qū)別
http://blog.csdn.net/leecrest/article/details/31742419 Lua中require史煎、dofile谦屑、loadfile的區(qū)別