如何重新加载已更改的 Lua 模块/脚本?

我想在“C/C++”端动态重新加载 *.lua 文件,当它发生更改时。如何以正确的方式实现?我找到了描述“Lua”端过程的答案。设置 package.loaded.??? = nilrequire 会自动重新加载它,但我没有那部分内容。

我试过下面的代码(仅用于测试目的):

void loadScript(lua_State* l, const std::string& f_path) {
    int error = luaL_loadfile(l, f_path.c_str()) || lua_pcall(l, 0, 0, 0);
    cout << "load file result: " << error << endl;
}

每当 f_path 的内容发生更改时,我都会调用它。

它可以正常工作,但我有一个假设:

  1. 每次我加载相同的文件 - 我不重新加载它,我只是向“ _lua堆栈_”中添加新项,并执行最上面的项目(最新加载的项目)。
  2. 将要重新加载的文件可能不应该有全局变量。
  3. 我有个想法:“肯定做错了什么”。

我需要澄清它应该如何工作,并了解它是如何工作的。

点赞