我正在做一个小项目,试图将 lua 与 c++ 集成。然而,我的问题如下:
我有多个 lua 脚本,我们称它们为 s1.lua s2.lua 和 s3.lua。它们中的每一个都有以下函数:setVars() 和 executeResults()。
现在我可以通过 LuaL_dofile 调用一个 lua 文件,并在使用 setVars() 和/或 executeResults() 之后立即调用。然而这里的问题是,在我加载 s2.lua 之后,我不能再调用 s1.lua 的函数。这意味着我必须重做 s1.lua 上的 LuaL_dofile 才能重新获得对该函数的访问权限,这样做我将无法访问 s2.lua 中的函数。
有没有办法简单地连续加载所有lua文件,然后开始随意调用它们的函数?像 s1->executeResults() s5->executeResults() s3->setVars() 等。
我目前已经有一个系统使用 boost::filesystem 来检测文件夹中的所有 lua 文件,然后我将这些文件名保存在一个向量中,然后简单地遍历该向量以连续加载每个 lua 文件。
放弃用 lua 文件名填充向量,我的插件加载函数现在看起来像这样:
void Lua_plugin::load_Plugins(){
std::vector<std::string>::const_iterator it;
for (it=Lua_PluginList.begin(); it!=Lua_PluginList.end(); it++){
std::cout<<"File loading: " << *it << std::endl;
std::string filename = *it;
std::string filepath = scriptdir+filename;
if (luaL_loadfile(L, filepath.c_str()) || lua_pcall(L, 0, 0, 0)) {
std::cout << "ScriptEngine: error loading script. Error returned was: " << lua_tostring(L, -1) << std::endl;
}
}
}
为了更清楚一点,我在 .lua 中的所有内容都是这样的:
-- s1.lua
setVars()
--do stuff
end
executeResults()
--dostuff
end
等等,但我希望能够在简单地连续加载两者之后调用 s1.lua 的 setVars() 和 s2.lua 的 setVars()。