如何在内存中加载文件数据,并且不需要重新加载。就像Java中的静态字段一样?

我有一个函数:它会加载一个文件数据并建立一个表。我希望只在第一次调用函数时加载文件,以后每次调用该函数都从内存中获取返回的表,不要再次加载文件(您知道重复进行 I/O 操作是不好的)。目标就像 Java 中的静态字段一样,只构建一次,然后使用它。怎么做呢?

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

点赞
stackoverflow用户734069
stackoverflow用户734069

你可以通过以下多种方式来实现。例如:

local myInternalLocal = nil

function FuncName(...)
  if(not myInternalLocal) then
    myInternalLocal = -- 做一些建立表的工作。
  end

  return myInternalLocal
end

或者,你可以通过替换的方式来实现,这种方式可以更好地隐藏内部变量,并且速度(略微)更快:

function FuncName(...)
  local myInternalLocal = -- 做一些建立表的工作。
  FuncName = function()
    return myInternalLocal
  end
end

不足之处在于模块中的情况。如果这是在一个模块中,那么你可能需要改变它重新绑定函数的方式。当然,如果有人在调用这个函数之前存储了旧函数,他们可以继续调用原始版本。

2012-03-12 09:47:23
stackoverflow用户107090
stackoverflow用户107090

我认为你想要使用 require 来加载文件。

2012-03-12 11:48:39