3

我想知道是否有一种方法可以只执行一次 lua 文件,并且后续尝试执行该 lua 文件将导致无操作。

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

詹姆士

4

3 回答 3

11

好吧,require差不多就是这样。

require "file" -- runs "file.lua"
require "file" -- does not run the "file" again
于 2009-09-02T19:33:22.100 回答
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
于 2009-09-03T02:01:53.320 回答
0

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

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

然后使用:

local x=require "something"

再次获取预加载的包。但这有点虐待...

于 2013-08-30T13:51:05.917 回答