1

我目前正在将 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 中那样抛出指针?

4

2 回答 2

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
于 2011-03-02T12:40:44.170 回答
0

Any link you use inside the function won't change the var outside of it. You should use smthg like this:

local count
function MyFunc()
      count = 1
end

There is 'local' isn't necessarily.

As alternative I can suggest you to use non-safety method:

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)
于 2011-03-02T11:06:32.070 回答