Lua 中未知索引的子表分配

我完全是新手,正在尝试将索引值分配给空表中的索引,就像这样:

table = {}
table[6].id = 231

p.s. 上面的代码是使用 MOOSE 框架编写的 Digital Combat Simulator 的一个更大脚本的简化版本。

我得到了以下日志消息:

... DCS: Mission script error: ... attempt to index field '?' (a nil value)

抱歉,如果看起来很愚蠢,但我找不到问题在哪里。 我甚至需要首先声明表格吗?

谢谢

点赞
用户3197530
用户3197530

语法是正确的,但你正在访问一个空值:table[6]目前是nil,因此你的代码会执行类似于

nil.id = 231

这显然是不可能的。首先定义子表:

myTable = {}
myTable[6] = {}
myTable[6].id = 231

或者使用子表的构造器:

myTable = {}
myTable[6] = { id = 231 }

请注意,table 是 Lua 中预定义的库表,因此你应该使用其他名称。

2018-05-03 14:52:42
用户1944004
用户1944004

另一个答案是正确的,我建议你采取那里呈现的方法。


您还可以使用元表自动为未知索引创建表。

local create_unknown
create_unknown = {
    __index = function(t,k)
        if not rawget(t,k) then
            rawset(t,k,setmetatable({},create_unknown))
        end
        return rawget(t,k)
    end
}

tab = setmetatable({},create_unknown)

tab[6].id = 231
tab[6].what["is"].happening = 123

print(tab[6].id)
print(tab[6].what["is"].happening)
2018-05-04 04:45:18