如何在使用整数计数器(i,j,k)循环时显式调用Lua表值以使表名/地址?

老实说,我还不太了解Lua。我正在尝试覆盖分配给一组表地址的本地数字值(这是正确的术语吗?)

这些地址的类型为:

project.models.stor1.inputs.T_in.defaultproject.models.stor2.inputs.T_in.default 等,stor编号递增。

我想在循环中做到这一点,但是找不到正确的表达式使整个字符串被Lua接受为表地址(再次,我希望这是正确的术语)。

到目前为止,我尝试了以下内容将字符串连接起来,但在调用和然后重写值时失败:

for k = 1,10,1 do
project.models.["stor"..k].inputs.T_in.default = 25
end
for k = 1,10,1 do
"project.models.stor"..j..".T_in.default" = 25
end

编辑:

我认为我已经找到了解决方案,如https://www.lua.org/pil/2.5.html所述:

对于初学者常见的错误是将a.x与a[x]混淆。第一种形式表示a["x"],即由字符串"x"索引的表。第二种形式是由变量x的值索引的表。看一下区别:

for k = 1,10,1 do
project["models"]["stor"..k]["inputs"]["T_in"]["default"] = 25
end
点赞
用户8621712
用户8621712

你几乎接近了。

Lua支持此表示法,通过提供a.name作为a["name"]的语法糖。

阅读更多: https://www.lua.org/pil/2.5.html

你一次只能使用一种语法。

要么使用tbl.key,要么使用tbl["key"]

.的限制在于你只能在其中使用常量字符串(这也是有效的变量名)。

在方括号[]中,你可以计算运行时表达式。

正确的方法是:

project.models["stor"..k].inputs.T_in.default = 25

models.["stor"..k]中的.是不必要的,并会导致错误。正确的语法只是models["stor"..k]

2020-11-18 21:26:14