将子表分配给 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)
我是 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)