我正在尝试运行此代码:
function calcs.grps(Number,ion_color)
grp .. ion_color .. Y[Number] = (ion_py_mm)
grp .. ion_color .. Z[Number] = (ion_pz_mm)
end
在Lua脚本中,数组已经存在(例如grp2Y,grp5Z等),我想使用这个函数根据输入的两个变量填充它们。我不断得到''='预期接近'的错误。 。''。我做错了什么?
稍微充实一点:
我在模拟中'飞'了120个离子。这实际上是12组10个离子。 10个单独的组由ion_color区分,ion_color是1到12的整数值。变量'Number'每次循环1到10,然后再转到下一个颜色。一旦我填充了这些数组,我想得到每个组的标准偏差。
谢谢!
答案 0 :(得分:3)
你不能构建"变量的名称,但您可以构造索引。使用两级嵌套表。
function calcs.grps(Number,ion_color)
ion['grp' .. ion_color .. 'Y'][Number] = (ion_py_mm)
ion['grp' .. ion_color .. 'Z'][Number] = (ion_pz_mm)
end
嗯,实际上你可以,因为所有的全局变量都只是_G
表中的条目,但是不要这样做,因为它很糟糕 - 它是不可读的,使得东西溢出到你没有的其他函数&# 39; t打算等等。
答案 1 :(得分:1)
您的问题的技术答案是简单地索引_G,_G是一个包含所有全局变量的表:
function calcs.grps(Number,ion_color)
_G['grp' .. ion_color .. Y'][Number] = (ion_py_mm)
_G['grp' .. ion_color .. 'Z'][Number] = (ion_pz_mm)
end
但我认为更好的问题是,为什么你不这样组织它......
local ions = {
Red = {
{
Y = 0, --Y property
Z = 0 --Z property
},
--Continue your red ions
},
NewColor = {
Y = 0, --Y property
Z = 0 --Z property
},
--Continue this color's ions
},
--You get the idea
}
function calcs.grps(color, number)
ions[color][number].Y = (ion_py_mm)
ions[color][number].Z = (ion_pz_mm)
end
然后你会传递一种颜色,一个数字表示这种颜色的哪个离子
看起来更干净,IMO。