【问题标题】:How to have Lua script changes during runtime take effect / reload script?如何在运行时使 Lua 脚本更改生效/重新加载脚本?
【发布时间】:2013-05-01 22:48:28
【问题描述】:

我在 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 var,它仍然是 100 并且 lua_getglobal 不会抱怨(除非我在启动时这样做),num 的值将是主应用程序启动时的值。在应用程序运行时重新加载脚本并获取最新数字需要什么。

【问题讨论】:

    标签: objective-c lua


    【解决方案1】:

    你做的大致正确,但我不认为 Lua 是这里的问题,问题是包中的文件在你重建应用程序之前不会改变。

    如果您只是加载文件而不是使用捆绑包,那么您所拥有的就可以了。

    【讨论】:

    • 我只是使用 NSBundle 获取文件的路径,即用于填充 luaFilePath。无论如何,这不应该改变。 luaL_loadfile 仍然加载文件。
    • 其实你是对的,是 Xcode/iOS 捆绑构建系统导致了这种情况。我正在编辑的文件不是正在加载的文件 - 它正在加载应用程序包中的文件。很好,现在有原因了,还是不知道怎么解决。
    • 其实很简单,至少如果在 Mac 上使用模拟器运行的话。只需将 luaFilePath 变量直接更改为 lua 文件在机器上的任何位置。经过测试,它可以工作。无论如何,这就是我感兴趣的全部,因为在设备上我不会有任何运行时更改。太好了,非常感谢约翰。
    猜你喜欢
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 2016-05-16
    • 2021-03-02
    相关资源
    最近更新 更多