dofile与loadfile

dofile与loadfile在交互状态下调试很方便,但两者有些微不同。
dofile与loadfile
dofile与loadfile在交互状态下调试很方便,但两者有些微不同。
loadfile会从一个文件加载Lua代码块,但它不会运行代码,只是编译代码,然后将编译结果作为一个函数返回。
dofile是两步骤,先执行loadfile,然后执行加载后的代码块。
通过一个例子进行说明。比如有一个文件dofile_loadfile.lua,其内容为:
print('do this file')
function myadd(a, b)
return a + b
end
然后进入交互环境
>myadd
nil
>dofile('dofile_loadfile.lua')
do this file
>myadd
function: 0x90e300
可以看到,使用dofile相当于执行了这个文件,执行了打印操作,同时也定义了函数myadd。
再来看loadfile,重新进入交互环境
>myadd
nil
>f=loadfile('dofile_loadfile.lua')
>myadd
nil
>f
function: 0x111a4e0
>f()
do this file
>myadd
function: 0x1119650
可以看到,使用loadfile会将文件中的代码作为一个函数返回。执行这个函数相当于执行了文件中的代码,进行了打印,并且定义了函数myadd
如果需要多次运行一个文件,使用loadfile会好一些,多次调用它的执行结果就可以了,节省开销。