1.loadfile——只编译,不运行java
loadfile故名思议,它只会加载文件,编译代码,不会运行文件里的代码。
好比,咱们有一个hellofile.lua文件:函数
复制代码代码以下:
print(“hello”);
function hehe()
print(“hello”);
end
这个文件里有一句代码,和一个函数。试试用loadfile加载这个文件,以下代码:测试
复制代码代码以下:
loadfile("hellofile.lua");
print("end");
输出结果以下:ui
复制代码代码以下:
[LUA-print] end
若是说loadfile会执行文件里的代码的话,那么,应该会输出hello字符串的。
结果代表,它是不会执行代码的。lua
2.dofile——执行spa
很明显,dofile就是会执行代码的家伙了,以下代码:code
复制代码代码以下:
dofile("E:/Android/wordspace_cocosIDERc0/CocosLuaTest/src/hellofile.lua");
print("end");
输出结果以下:字符串
复制代码代码以下:
[LUA-print] hello
[LUA-print] end
这里有点尴尬,文件路径我用了绝对路径,由于dofile在Coco Code IDE里使用相对路径会找不到文件(即便使用了addSearchPath)it
不过不要紧,不影响本文的内容。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字符串。
require:
在lua中,require函数像dofile同样载入文件为一个Chunk并执行。但具备两个好处:1. 按模式加载文件 2.不会重复载入相同的文件。
require的参数是一个完整的文件名(目录名+文件名,可能有点相似于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
因此,若是要执行当前目录的test.lua文件,咱们只须要require("test")便可,可是若是咱们要执行另外一个目录下的文件,好比"D:\lua\a.lua",咱们就须要将这个路径加入到package.path当中,例如咱们能够这样写:
package.path=package.path .. ";D:\?.lua"
这样咱们就可使用require函数了,好比require("a").
注:require只会被加载一次。
复制代码代码以下:
for callCount = 0, 2 do
require("test");
end