在Lua中仅需一次执行文件。

我在想是否有一种方法可以仅执行 Lua 文件一次,任何后续尝试执行该 Lua 文件的操作都将导致无操作。

我已经考虑过类似于 C++ 头文件的 #if/else/endif 技巧。我想知道是否有标准的实现方式。

詹姆斯

原文链接 https://stackoverflow.com/questions/1369646

点赞
stackoverflow用户95612
stackoverflow用户95612

嗯,require 就是这么做的。

require "file" -- 运行 "file.lua"
require "file" -- 不会再次运行 "file"
2009-09-02 19:33:22
stackoverflow用户107090
stackoverflow用户107090

require 的唯一问题是它只适用于模块名称而非文件名称。特别是,require 不能处理带有路径的名称(虽然它确实使用 package.pathpackage.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-03 02:01:53
stackoverflow用户668125
stackoverflow用户668125

基于lhf的答案,并利用package,可以这样一次性完成:

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

然后使用:

local x=require "something"

再次获取预加载的包。 但这有点滥用...

2013-08-30 13:51:05