让 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 默认地查看具有相同变量名称的变量吗?非常感谢。 (上面的源是示例,实际上我正在使用与 C 的 Lua)

** PS:**我再次检查了上面的测试,它有效。请参见 Nicol 的答案下面的评论。

点赞
用户33252
用户33252

通常的方法是有一个系统参数的 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
>

2012-08-25 02:31:12
用户734069
用户734069

我尝试重现你的错误,但它正如你所预期地工作。因此,如果你遇到此问题,几乎可以肯定在你没有提到的某个地方你正在做一些事情。你确定那些文件包含你所说的内容吗?

2012-08-25 10:28:05