让Lua覆盖全局变量

时间:2012-08-24 22:21:31

标签: lua

我正在使用Lua作为配置语言。众所周知,配置应该是系统范围的配置和用户的配置。

我刚刚发现Lua会保留原始值而不是覆盖它们。

例如,这是第一个源文件

-- a.lua
var=1

和第二个源文件

-- b.lua
var=2

这是结果:

> lua-5.1 
Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio
> dofile ("a.lua")
> dofile ("b.lua")
> print(var)
1

是的。 var尚未被覆盖。这将使用户自己的配置不起作用。任何人都知道如何让默认情况下具有相同变量名的Lua概述变量?非常感谢。 (上面的来源只是例如,实际上我正在使用Lua和C)

PS:我再次检查了上面的测试,但它确实有效。请在Nicol的回答中看到评论。

2 个答案:

答案 0 :(得分:3)

通常的方法是拥有table个系统参数和table个用户参数。如,

a.lua

sys = { var = 1; a = 3 }

b.lua

usr = { a = 5; b = 7 }

配置管理器

setmetatable(usr,{__index = sys})

测试:

> =usr.a
5
> =usr.var
1
> =usr.b
7
> 

答案 1 :(得分:1)

我尝试重现您的错误,但它的工作方式完全符合您的预期。因此,如果你得到这个,那几乎可以肯定你正在做某件你没有提到的事情。你确定那些文件包含你说的吗?