2

我正在尝试将 Lua 嵌入到游戏中。我想要做的是创建一个加载函数,它将加载文件夹中的所有文件,然后根据将存储在 C++ 端的文件创建对象。但是,如果我使用 dofile 之类的东西,它会用该文件中的变量污染所有内容。如何将此导入更改为本地导入?

4

1 回答 1

2

您可以使用loadfile根据文件内容获取函数,然后setfenv(fn,{})设置环境,然后调用该函数(可能包含在 中pcall):

local fn, err = loadfile("myfile")
if fn then
  setfenv(fn,{})
  local ok, err = pcall(fn)
  if not ok then error(err) end
else
  error(err)
end

您还可以setfenv使用脚本访问或提供对全局环境的访问所需的值填充传递给的表,例如:

local env = {}
setmetatable(env,{__index = _G})
setfenv(fn,env)

这就是 Lua 5.1 的全部内容。

于 2013-02-18T00:04:56.307 回答