基于传递给函数的变量选择要写入的数组,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个离子。这实际上是10个离子的12组。每个由离子颜色所区分的10个离子,离子颜色是1到12之间的整数值。变量“Number”只是在每次移动到下一个颜色之前循环1到10次。一旦我填充了这些数组,我想得到每组的标准偏差。

谢谢!

点赞
用户936986
用户936986

你不能“构造”变量名称,但可以构造索引。使用两个嵌套表的级别。

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 17:12:59
用户3979429
用户3979429

你的技术问题的答案很简单。只需索引 _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属性
            Z = 0 --Z属性
        },
        --继续你的红色离子
    },
    NewColor = {
            Y = 0, --Y属性
            Z = 0 --Z属性
        },
        --继续这种颜色的离子
    },
    --你明白了
}

function calcs.grps(color, number)
    ions[color][number].Y = (ion_py_mm)
    ions[color][number].Z = (ion_pz_mm)
end

然后你会传递一个颜色和一个数字,指示该颜色中的哪个离子。

据我看来,这看起来更整洁。

2015-12-10 19:39:03