我试图运行以下代码:
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个离子。这实际上是由10个离子组成的12组。10的单个组由ion_color来区分,它是一个从1到12的整数值。变量'Number‘在进入下一个颜色之前每一次只循环1到10次。一旦我填充了这些数组,我就想得到每个组的标准偏差。
谢谢!
发布于 2015-12-10 09:12:59
您不能“构造”变量的名称,但是可以构造一个索引。使用两个层次的嵌套表。
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
表中的条目,但是不要这样做,因为它是坏的-它是不可读的,会使东西溢出到其他您不打算做的函数,等等。
发布于 2015-12-10 11:39:03
对您的问题的技术回答是简单地索引_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
然后,您将传递一个颜色,以及一个指示该颜色的哪个离子的数字。
看上去干净多了,海事组织。
https://stackoverflow.com/questions/34207455
复制相似问题