android lua loadluafile 相对路径,Lua中的loadfile、dofile、require详解
1.loadfile——只編譯,不運(yùn)行java
loadfile故名思議,它只會加載文件,編譯代碼,不會運(yùn)行文件里的代碼。
好比,咱們有一個hellofile.lua文件:函數(shù)
復(fù)制代碼代碼以下:
print(“hello”);
function hehe()
print(“hello”);
end
這個文件里有一句代碼,和一個函數(shù)。試試用loadfile加載這個文件,以下代碼:測試
復(fù)制代碼代碼以下:
loadfile("hellofile.lua");
print("end");
輸出結(jié)果以下:ui
復(fù)制代碼代碼以下:
[LUA-print] end
若是說loadfile會執(zhí)行文件里的代碼的話,那么,應(yīng)該會輸出hello字符串的。
結(jié)果代表,它是不會執(zhí)行代碼的。lua
2.dofile——執(zhí)行spa
很明顯,dofile就是會執(zhí)行代碼的家伙了,以下代碼:code
復(fù)制代碼代碼以下:
dofile("E:/Android/wordspace_cocosIDERc0/CocosLuaTest/src/hellofile.lua");
print("end");
輸出結(jié)果以下:字符串
復(fù)制代碼代碼以下:
[LUA-print] hello
[LUA-print] end
這里有點尷尬,文件路徑我用了絕對路徑,由于dofile在Coco Code IDE里使用相對路徑會找不到文件(即便使用了addSearchPath)it
不過不要緊,不影響本文的內(nèi)容。io
3.require——我只執(zhí)行一次
require和dofile有點像,不過又很不同,require在第一次加載文件的時候,會執(zhí)行里面的代碼。
可是,第二次以后,再次加載文件,則不會重復(fù)執(zhí)行了。換句話說,它會保存已經(jīng)加載過的文件,不會重復(fù)加載。
測試代碼以下:
復(fù)制代碼代碼以下:
for i = 1, 2, 1 do
require("hellofile.lua");
end
print("end");
為了說明這種狀況,我刻意調(diào)用了兩次require,輸出結(jié)果以下:
復(fù)制代碼代碼以下:
[LUA-print] hello
[LUA-print] end
和咱們說的同樣,調(diào)用了兩次,可是代碼只執(zhí)行了一次。
若是這里換成dofile,則會輸出兩次hello字符串。
require:
在lua中,require函數(shù)像dofile同樣載入文件為一個Chunk并執(zhí)行。但具備兩個好處:1. 按模式加載文件 2.不會重復(fù)載入相同的文件。
require的參數(shù)是一個完整的文件名(目錄名+文件名,可能有點相似于java中的包吧),即package.path,典型的package.path值以下(其中D:\Bin為lua.exe所在目錄):
.\?.lua;D:\Bin\lua\?.lua;D:\Bin\lua\?\init.lua;D:\Bin\?.lua;D:\Bin\?\init.lua
一般對咱們有用的目錄是.\?.lua
因此,若是要執(zhí)行當(dāng)前目錄的test.lua文件,咱們只須要require("test")便可,可是若是咱們要執(zhí)行另外一個目錄下的文件,好比"D:\lua\a.lua",咱們就須要將這個路徑加入到package.path當(dāng)中,例如咱們能夠這樣寫:
package.path=package.path .. ";D:\?.lua"
這樣咱們就可使用require函數(shù)了,好比require("a").
注:require只會被加載一次。
復(fù)制代碼代碼以下:
for callCount = 0, 2 do
require("test");
end
總結(jié)
以上是生活随笔為你收集整理的android lua loadluafile 相对路径,Lua中的loadfile、dofile、require详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html 执行外部js的函数,javas
- 下一篇: html表格的表头怎么合并单元格,使用t