如何使用luabind在脚本中正确加载文件?

时间:2013-02-17 23:21:35

标签: c++ lua luabind

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

1 个答案:

答案 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。