如何在运行时使 Lua 脚本更改生效 / 重新加载脚本?

我正在使用C++/Objective-C应用程序进行以下操作以加载lua脚本。lua_getglobal能够成功地获取"testnum"的值,但如果在应用程序运行期间更新脚本,则该值永远不会改变,下次通过此部分代码路径时也是如此。

 L = luaL_newstate();
    luaL_openlibs(L);

    lua_settop(L, 0);

    int err;

    NSString *  luaFilePath = [[NSBundle mainBundle] pathForResource:@"Test" ofType:@"lua"];
    err = luaL_loadfile(L, [luaFilePath cStringUsingEncoding:[NSString defaultCStringEncoding]]);

    err = lua_pcall(L, 0, 0, 0);
    if (0 != err) {
        luaL_error(L, "error: %s",
                   lua_tostring(L, -1));
        return;
    }

    lua_getglobal(L, "testnum");

    int num = lua_tointeger(L, -1);

lua文件(Test.lua)仅为

testnum = 100

我更改了testnum的值,但在C++/Objective-C应用程序中始终保持为100(或在启动时设置的任何其他值)。我甚至可以完全删除testnum变量,它仍然是100,而lua_getglobal不会报错(除非我在启动时这样做),num的值将是主应用程序启动时的任何值。在应用程序运行期间重新加载脚本并获取最新的数字需要什么。

点赞
用户2338821
用户2338821

你大致做得没错,但我不认为问题出在 Lua 上,而是出在包中的文件在重新构建应用之前不会改变。

如果你只是加载一个文件而不是使用一个包,你的方法会起作用。

2013-05-01 14:48:28