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

时间:2018-05-03 14:39:06

标签: lua lua-table

我对Lua Script完全不熟悉,我试图将索引值分配给空表中的索引,如下所示:

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

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

我收到以下日志消息:

  

... DCS:任务脚本错误:...尝试索引字段'?' (没有   值)

很抱歉,如果它看起来很愚蠢,但我无法找到它的问题。 我是否需要首先申报该表?

谢谢

2 个答案:

答案 0 :(得分:3)

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

的操作
nil.id = 231

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

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

或使用子表的构造函数:

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

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

答案 1 :(得分:1)

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

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

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)