lua,从文件导入时将字符串与表内的变量组合在一起

时间:2016-06-02 18:02:49

标签: lua

我在表格中遇到变量问题。这是必不可少的,因为我使用表作为我的程序的配置。

所以我测试了以下有效的代码:

> x = "X"
> t = {["ref"]="table with value: "..x}
> print(t["ref"])
table with value: X
> x = "Y"
> t = {["ref"]="table with value: "..x}
> print(t["ref"])
table with value: Y
然而,如果没有第二个> t = ["ref"]="table with value: "..x

,它就无法运作

现在我把它实现到我的主程序中,由两个文件组成,一个女巫返回配置表。还有一个包含所有功能和内容的文件。它看起来如下

文件A(main.lua):

testString = "test1"
print(testString)
local CONFIG = require'config'
print(CONIFG[1].test)
testString = "test2"
print(testString)
local CONFIG = require'config'
print(CONIFG[1].test)

文件B(config.lua):

local CONFIG = {
           {["test"]=[[this is a test: ]]..testString}
          }
return CONFIG

现在当我运行文件A(a.k.a.main.lua)时,我得到以下输出:

test1
this is a test: test1
test2
this is a test: test1

我无法弄清楚我在这里做错了什么..我认为这与单个字符串有关,所以我把testString作为一个表,但这给了我相同的结果...

(这个标题真的很吓人......对不起)

1 个答案:

答案 0 :(得分:4)

require按设计缓存返回值。因此,如果使用相同的字符串调用require,则不会再次执行脚本。它只会返回先前返回的值。

require用于加载模块。并且模块不应该根据其他全局状态更改其返回值。

您可能正在寻找的功能是dofile。这将始终加载并执行该文件(但它没有require的路径搜索属性)。或者,您可以使用loadfile将文件作为函数加载,然后执行该函数以随时重新生成表。

此外:

  

我在表格中遇到变量问题。

表格中没有"变量"。或者至少不是你的意思。期望对变量进行更改以影响其他值,就像期待这样:

a = 5
b = a + 5
a = 10
assert(b == 15, "This will never be true.")

当评估表达式(a + 5"table with value: " .. x)时,它会产生一个值。结果值决不依赖于生成它的表达式中的任何值或变量。

这就是你必须重新生成价值的原因;因为价值观不会因为某些变量而发生变化。