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