lua,当从文件导入时,将字符串与变量组合到表格内

我遇到了一个关于表格内变量的问题,这对我的程序来说很重要,因为我使用表格作为配置。

因此,我测试了以下代码,它可以正常工作:

> x = "X"
> t = {["ref"]="带有值的表格:"..x}
> print(t["ref"])
带有值的表格:X
> x = "Y"
> t = {["ref"]="带有值的表格:"..x}
> print(t["ref"])
带有值的表格:Y

然而,如果没有第二个> t = ["ref"]="带有值的表格:"..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"]=[[这是一个测试:]]..testString}
}
return CONFIG

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

test1
这是一个测试:test1
test2
这是一个测试:test1

我无法弄清楚我做错了什么...我认为这可能与它是一个单一的字符串有关,所以我把testString变成了一个表格,但是结果一样...

(该标题看起来真的很可怕...抱歉)

点赞
用户734069
用户734069

require由设计得到缓存返回值。因此,如果您使用相同的字符串调用require,它将不会再次执行脚本。它将简单地返回先前返回的值。

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

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

此外:

我在处理表中的变量时遇到问题。

表中没有“变量”。或者至少不是您的意思。期望变量的更改会影响其他值,就像期望这样一样,a = 5b = a + 5a = 10assert(b == 15,“这永远不会成立。”)

当计算表达式(无论是a + 5还是“带有值的表:”.. x)时,它会生成一个值。生成的值与生成它的表达式中的任何值或变量无关。

这就是为什么您必须重新生成该值的原因,因为值不会因为某个变量的更改而改变。

2016-06-02 18:20:50