1. 程式人生 > >Lua中的loadfile、dofile、require詳解

Lua中的loadfile、dofile、require詳解

http://www.jb51.net/article/55125.htm

本來今天不應該討論這幾個函式的,不過,為了湊字數..不,為了方便以後的文章,還是要談談這幾個基礎函式的~

1.loadfile——只編譯,不執行

loadfile故名思議,它只會載入檔案,編譯程式碼,不會執行檔案裡的程式碼。
比如,我們有一個hellofile.lua檔案:

複製程式碼程式碼如下:
print(“hello”);
function hehe()
print(“hello”);
end

這個檔案裡有一句程式碼,和一個函式。試試用loadfile載入這個檔案,如下程式碼:
複製程式碼程式碼如下:
    loadfile("hellofile.lua");
    print("end");

輸出結果如下:

複製程式碼程式碼如下:
[LUA-print] end

如果說loadfile會執行檔案裡的程式碼的話,那麼,應該會輸出hello字串的。
結果表明,它是不會執行程式碼的。

2.dofile——執行

很明顯,dofile就是會執行程式碼的傢伙了,如下程式碼:

複製程式碼程式碼如下:
    dofile("E:/Android/wordspace_cocosIDERc0/CocosLuaTest/src/hellofile.lua");
    print("end");

輸出結果如下:

複製程式碼程式碼如下:
[LUA-print] hello
[LUA-print] end

這裡有點尷尬,檔案路徑我用了絕對路徑,因為dofile在Coco Code IDE裡使用相對路徑會找不到檔案(即使使用了addSearchPath)

不過沒關係,不影響本文的內容。

3.require——我只執行一次

require和dofile有點像,不過又很不一樣,require在第一次載入檔案的時候,會執行裡面的程式碼。

但是,第二次之後,再次載入檔案,則不會重複執行了。換句話說,它會儲存已經載入過的檔案,不會重複載入。
測試程式碼如下:

複製程式碼程式碼如下:
    for i = 1, 2, 1 do
        require("hellofile.lua");
    end
    print("end");

為了說明這種情況,我刻意呼叫了兩次require,輸出結果如下:

複製程式碼程式碼如下:
[LUA-print] hello
[LUA-print] end

和我們說的一樣,呼叫了兩次,但是程式碼只執行了一次。

如果這裡換成dofile,則會輸出兩次hello字串。

4.結束

我發現這樣邊看書邊整理文章,進度有點慢…真是魚和熊掌的問題了。