Lua&隐含的全球状态

时间:2011-03-02 10:54:18

标签: c lua embedded-language

我现在正在将Lua集成到我的项目中,而且我在路上遇到了一个小设计问题。目前,如果我想从宿主应用程序获取Lua脚本中的信息,我会以这种方式调用我在C中注册的函数:

-- Inside lua
local state = host.get_state()
-- Do something with "state"

现在的问题是:状态显然会发生变化,“状态”变量将过时,很可能无效。到目前为止,我一直生活在这里,因为不需要太频繁的全球状态。在以下情况中,它更成问题:

local user = host.get_user('id')
host.set_user_flags(user, 'abc')
-- internally "user" is now updated, but to get the accurate information in Lua, I
-- will have to explicitly redo "user = host.get_user('id')" for every operation
-- that accesses this table

我已经阅读了一些关于参考文献的内容,我认为他们可以帮助我解决这个问题,但我并不是真的理解它。

是不是有一些方法可以像在C中那样抛出指针?

2 个答案:

答案 0 :(得分:0)

您在函数内使用的任何链接都不会更改其外部的var。你应该像这样使用smthg:

local count
function MyFunc()
      count = 1
end

有'本地'不一定。

作为替代方案,我可以建议您使用非安全方法:

count = 0
function MyFunc(v) --we will throw varname as a string inside
     _G[v] = 1 -- _G is a global environment
end
MyFunc('count')
print(count)

答案 1 :(得分:0)

我发现表是作为引用传递的,我可以从函数内部修改它们,如下所示:

static int dostuff(lua_State *L)
{
    lua_pushstring(L, "b");
    lua_pushnumber(L, 23);
    lua_settable(L, 1);

    return 0;
}
/* lua_register(L, "dostuff", &dostuff); */

在Lua内部:

t = { a = 'a', b = 2 }

print(t.a, t.b)
dostuff(t)
print(t.a, t.b)

将导致:

a   2
a   23