2011-03-02 63 views
1

我正在将Lua整合到我的项目中,而且我正在面对一个小型设计问题。目前,如果我想从我的主机应用到Lua脚本获取信息,我认为那是我用C注册的功能,以这种方式:Lua&隐式全局状态

-- 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一样在指针中抛出指针?

回答

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 
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) 
+0

功能在C中定义,只是注册到Lua中,我需要一个lua C API的方法来做到这一点 – LukeN 2011-03-02 11:35:25

+0

所以,看在Lua参考手册lua_setlocal和lua_getlocal C函数。 – Archinamon 2011-03-02 11:49:24