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