lua中dofile、loadfile、require區別

1.loadfile——只編譯,不運行函數

loadfile故名思議,它只會加載文件,編譯代碼,不會運行文件裏的代碼。
好比,咱們有一個hellofile.lua文件:測試

代碼以下:

print(「hello」);
function hehe()
print(「hello」);
end


這個文件裏有一句代碼,和一個函數。試試用loadfile加載這個文件,以下代碼:ui

代碼以下:

    loadfile("hellofile.lua");
    print("end");

 

輸出結果以下:lua

代碼以下:

[LUA-print] end


若是說loadfile會執行文件裏的代碼的話,那麼,應該會輸出hello字符串的。
結果代表,它是不會執行代碼的。spa

 

2.dofile——執行code

很明顯,dofile就是會執行代碼的傢伙了,以下代碼:字符串

代碼以下:

    dofile("E:/Android/wordspace_cocosIDERc0/CocosLuaTest/src/hellofile.lua");
    print("end");

 

輸出結果以下:it

代碼以下:

[LUA-print] hello
[LUA-print] end


這裏有點尷尬,文件路徑我用了絕對路徑,由於dofile在Coco Code IDE裏使用相對路徑會找不到文件(即便使用了addSearchPath)io

 

不過不要緊,不影響本文的內容。編譯

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字符串。

相關文章
相關標籤/搜索