5

私は小さなLuaスクリプトを持っています:

function g ()
    print( AUp);
end

CI からスクリプトをロードし、AUp という名前の変数を追加して、数百回実行します。

for( i=0; i<2000; i++)
{
    num= i;
    lua_pushnumber( L, i);
    lua_setglobal( L, "AUp");

    lua_getglobal( L, "g");
    if (lua_call( L, 0, 0) != 0)
       printf( "%s", lua_tostring(L, -1));
}

print の出力は常に 0 です。(i+1) を入力すると、出力は常に 1 になります。AUp の値を変更することはできません。lua_pushnumner と lua_setglobal への最初の呼び出しのように、値は同じままです。

なにが問題ですか?関数は何度も呼び出す必要がありますが、AUp の値は変更される可能性があるため、呼び出す前に更新する必要がありlua_callます。

4

1 に答える 1

0

よくわかりませんが、次のことを試しましたか: 1. Lua スクリプトで AUp の初期値を定義する。2. C ループ中のスタック値のクリーニング。?

編集:これらの2つの点を忘れてください:)

for(i = 0; i<200; i++)
   {
            lua_pushnumber(l, i);
            lua_setglobal(l, "foo");

            lua_getglobal(l, "test_f");
            if (lua_pcall(l, 0, 0, 0) != 0)
            {
                    printf( "%s", lua_tostring(l, -1));
            }
    }

function test_f()
    print(foo)
end

マニュアルに従って、Lua 5.1.5 Btw で問題なく動作します- void lua_call (lua_State *L, int nargs, int nresults);(lua_pcall()代わりに使用してください)。Lua 5.1.5 ヘッダーを使用してコードをコンパイルすることさえできません。

于 2013-07-10T12:30:14.217 に答える