我不知道是否有一种方法做一个LUA文件只有一次,有任何后续尝试做LUA文件将导致无操作。

我已经想过做一个类似于C ++头的#的if / else / ENDIF伎俩。我不知道是否有实现这个标准的方式。

詹姆斯

有帮助吗?

解决方案

阱,require几乎做到这一点。

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

其他提示

有需要的唯一问题是,它的模块名称,而不是文件名。特别地,需要不处理用路径名(虽然它确实使用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

根据LHF的回答,但是利用package,你也可以这样做一次:

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

,然后使用:

local x=require "something"

再次获得预加载的程序包。但是这是一个有点辱骂......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top