我想知道是否有办法只执行一次lua文件并且有任何后续尝试执行该lua文件将导致无操作。
我已经考虑过做类似于C ++ header的#if / else / endif技巧的事情。我想知道是否有一种标准的方法来实现它。
詹姆斯
答案 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"
再次获取预加载的包。但这有点滥用......