1

lua スクリプトをロードするために、C++/Objective-C アプリで以下を実行しています。正常に動作し、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 の値は、メイン アプリケーションの起動時の値になります。アプリケーションの実行中にスクリプトをリロードして最新の番号を取得するために必要なもの。

4

1 に答える 1