注册 | 登录

张浩然的个人站



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会好一些,多次调用它的执行结果就可以了,节省开销。

  Lua

请点击登录发表评论


About ME

about me

张浩然

朝三暮四的的执着青年,嵌入式打杂工程师,web全沾工程师

伪文青,真宅男,历史爱好者

TAG cloud