我想知道是否有一种方法可以只执行一次 lua 文件,并且后续尝试执行该 lua 文件将导致无操作。
我已经考虑过做一些类似于 C++ 标头的 #if/else/endif 技巧的事情。我想知道是否有标准的方法来实现这一点。
詹姆士
好吧,require
差不多就是这样。
require "file" -- runs "file.lua"
require "file" -- does not run the "file" again
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
基于 lhf 的回答,但利用package
,您也可以这样做一次:
package.preload["something"]=dofile "/path/to/your/file.lua"
然后使用:
local x=require "something"
再次获取预加载的包。但这有点虐待...