在Lua中只提交一次文件

时间:2009-09-02 19:26:59

标签: lua luajit

我想知道是否有办法只执行一次lua文件并且有任何后续尝试执行该lua文件将导致无操作。

我已经考虑过做类似于C ++ header的#if / else / endif技巧的事情。我想知道是否有一种标准的方法来实现它。

詹姆斯

3 个答案:

答案 0 :(得分:11)

好吧,require几乎就是这样。

require "file" -- runs "file.lua"
require "file" -- does not run the "file" again

答案 1 :(得分:2)

require的唯一问题是它适用于模块名称,而不是文件名。特别是,require不处理带路径的名称(尽管它使用package.path和package.cpath来定位文件系统中的模块)。

如果要处理带路径的名称,可以按如下方式编写一个简单的dofile包装器:

do
  local cache={}
  local olddofile=dofile
  function dofile(x)
    if cache[x]==nil then
      olddofile(x)
      cache[x]=true
   end 
  end
end

答案 2 :(得分:0)

基于lhf的回答,但是利用package,你也可以这样做一次:

package.preload["something"]=dofile "/path/to/your/file.lua"

然后使用:

local x=require "something"

再次获取预加载的包。但这有点滥用......