android lua loadluafile 相对路径,Lua中的loadfile、dofile、require详解

本文详细比较了lua中的loadfile、dofile和require函数,阐述了它们的区别:loadfile仅加载编译代码不执行,dofile执行文件内容,require首次加载时执行并缓存。通过实例展示了这些函数在实际操作中的行为和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值