【问题标题】:Lua adding/changing global variables from CLua从C添加/更改全局变量
【发布时间】:2013-07-08 08:29:07
【问题描述】:

我有一个小的 Lua 脚本:

function g ()
    print( AUp);
end

我从 C 加载脚本,添加一个名为 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

【问题讨论】:

  • 如果您检查立即推送的号码,您会找回那个号码吗?例如。 assert( lua_tonumber(L, -1) == i );?设置后检查AUp怎么样?例如。 lua_getglobal(L, "AUp"); assert(lua_tonumber(L, -1) == i);

标签: c variables lua


【解决方案1】:

我不确定,但您是否尝试过: 1、在Lua脚本中定义AUp初始值。 2. 在 C 循环期间清理堆栈值。 ?

编辑: 忘记这两点:)

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 顺便说一句,根据manual - void lua_call (lua_State *L, int nargs, int nresults);(改用lua_pcall())。甚至无法使用 Lua 5.1.5 头文件编译您的代码。

【讨论】:

  • 1.不,因为那时 AUp 必须在脚本中 2. 如何做到这一点?循环结束时的 lua_rawgeti 导致异常
  • 您使用的是哪个 Lua 版本?就我而言,您的代码 sn-p 根本无法编译。使用 lua_pcall() 效果很好。还添加了代码sn-p。
  • 我使用 4.1。它没有 pcall。好点子。 Lua 5 太大了,我在 PC 和 ARM9 上使用相同的版本。所以我决定使用版本 4。
  • @KarlSchulte lua_settop(L, 0); 将清空堆栈。
猜你喜欢
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
  • 2012-03-02
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 2013-03-09
相关资源
最近更新 更多