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