题
我不知道是否有一种方法做一个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"
再次获得预加载的程序包。但是这是一个有点辱骂......
不隶属于 StackOverflow