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

我正在尝试将 Lua 嵌入一款游戏中。我想要做的是创建一个 load 函数,它会加载文件夹中的所有文件,然后创建基于这些文件的对象,并将这些对象存储在 C++ 端。然而,如果我使用像 dofile 这样的东西,它会污染所有在该文件中的变量。我该如何将这个导入改为 local?

点赞
用户1442917
用户1442917

你可以使用 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-18 00:04:56