将子表分配给 Lua 中的未知索引

Assigning subtables to unknown indices in Lua

我是 Lua 脚本的新手,我正在尝试将索引值分配给空 table 中的索引,如下所示:

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

p.s。上面的代码是使用 MOOSE Framework 的数字战斗模拟器的更大脚本的简化。

我收到以下日志消息:

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

对不起,如果它看起来很愚蠢,但我找不到它有什么问题。 我是否需要首先声明 table?

谢谢

语法正确,但您访问的是 nil 值:table[6] 当前为 nil,因此您的代码执行类似

的操作
nil.id = 231

这显然是不可能的。先定义subtable:

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

或者使用子table:

的构造函数
table = {}
table[6] = { id = 231 }

请注意,table 是 lua 中的预定义库 table,因此您应该使用不同的名称。

另一个答案是正确的,我建议您采用那里介绍的方法。


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

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)