Lua dofile loadfile loadstring 區別,loadfileloadstring
dofile,把它當作 Lua 運行代碼的 chunk 的一種原始的操作。
1. dofile 實際上是一個輔助的函數。真正完成功能的函數是 loadfile;
2.與 dofile 不同的是 loadfile 編譯代碼成中間碼並且返回編譯後的 chunk 作為一個函數,而不執行代碼;
3. loadfile 不會拋出錯誤資訊而是返回錯誤碼。
將TestMain中的Print.lua改成otherPrint.lua(該lua檔案不存在),結果如上,loadfile返回錯誤碼和錯誤資訊,dofile卻拋出異常了,所以沒有列印出----------B-----------
4.loadfile只需要編譯一次,可以多次運行;dofile卻要每次都編譯(適用於完成比較簡單的功能)。
根據以上四條,對於loadfile,我們可以認為是這樣定義的:
Lua 把每一個 chunk 都作為一個匿名函數處理:
假如我們有一個檔案 foo.lua:
當我們執行命令 f = loadfile("foo.lua")後,foo 被編譯了但還沒有被定義,如果要定 義他必須運行 chunk:
loadstring 與 loadfile 相似,只不過它不是從檔案裡讀入 chunk,而是從一個串中讀入;
loadstring 編譯的時候不關心詞法範圍:
這個例子中,和想象的一樣 g 使用局部變數 i,然而 f 使用全域變數 i;loadstring 總 是在全域環境中編譯他的串。
Lua loadfile函數問題
loadfile 只會在你指定的路徑下搜尋。如果不是絕對路徑,那就是相對與目前的目錄的相對路徑。
require 會根據package.path 搜尋。
lua進,對於lua裡設定檔案路徑的問題
呃,lua文法裡是沒有這幾種介面的,系統給出的載入模組或者chunk的介面只有require,dofile,loadfile,loadstring等等,你給出的這幾個很明顯是自己封裝的介面,要看裡面的作用就要自己去看代碼了;不過看函數字面意思其實也比較明晰了吧,載入角色資料,載入設定檔,載入資源?