根据赋予函数Lua的变量选择要写入的数组

时间:2015-12-10 16:53:09

标签: arrays lua

我正在尝试运行此代码:

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,然后再转到下一个颜色。一旦我填充了这些数组,我想得到每个组的标准偏差。

谢谢!

2 个答案:

答案 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。