Lua基础之dofile、loadfile、require的区别

 

loadfile

特点:只编译,不运行。

一个lua文件是作为一个代码块(chunk)存在的,其实质就是一个函数,loadfile编译代码成中间码并且返回编译后的chunk作为一个函数,而不执行代码 ,并且loadfile一旦出错不会抛出错误信息而是返回错误代号。一旦发生错误,loadfile会返回nil和错误信息,这样我们就可以自定义错误处理。

想要通过loadfile加载并执行,可以用如下代码实现:

local f = assert(loadfile(filename))
f()

 

dofile

特点:编译和运行。

dofile每一次读入文件都会编译并且执行,它与loadfile的关系可以用如下代码表示:

function dofile (filename)
  local f = assert(loadfile(filename))
  return f()
end

如果loadfile失败assert会抛出错误。

 

require

特点:只编译运行一次

require和dofile一样会编译和运行。只是require在第一次加载文件的时候,会执行里面的代码 ,但第二次加载文件则不会重复执行了。那是因为它会自动缓存已经加载过的文件,不会重复加载,除非把缓存去掉。

 

 

 

 

参考链接:

https://www.cnblogs.com/slysky/p/5369223.html

你可能感兴趣的:(Lua,Lua,loadfile,dofile,require,区别)