为Lua中的未知索引分配子表
我对Lua脚本完全陌生,我正在尝试将索引值分配给空表中的索引,如下所示:为Lua中的未知索引分配子表,lua,lua-table,Lua,Lua Table,我对Lua脚本完全陌生,我正在尝试将索引值分配给空表中的索引,如下所示: table = {} table[6].id = 231 p、 上面的代码是使用MOOSE框架的数字作战模拟器更大脚本的简化 我收到以下日志消息: 。。。DCS:任务脚本错误:。。。尝试索引字段“?”(a nil 价值) 抱歉,如果它看起来很愚蠢,但我找不到它有什么问题。 我甚至需要首先声明表吗 谢谢语法正确,但您正在访问一个nil值:表[6]当前为nil,因此您的代码执行如下操作 nil.id = 231 这显然是不
table = {}
table[6].id = 231
p、 上面的代码是使用MOOSE框架的数字作战模拟器更大脚本的简化
我收到以下日志消息:
。。。DCS:任务脚本错误:。。。尝试索引字段“?”(a nil
价值)
抱歉,如果它看起来很愚蠢,但我找不到它有什么问题。
我甚至需要首先声明表吗
谢谢语法正确,但您正在访问一个nil值:
表[6]
当前为nil
,因此您的代码执行如下操作
nil.id = 231
这显然是不可能的。首先定义子表:
table = {}
table[6] = {}
table[6].id = 231
或者使用子表的构造函数:
table = {}
table[6] = { id = 231 }
请注意,表在lua中是预定义的库表,所以您应该使用不同的名称。另一个答案是正确的,我建议您采用这里介绍的方法
还可以使用元表为未知索引自动创建表
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)
我想使用id作为密钥。它不是应该是:表[6]={['id']=231}id不应该被解释为变量吗?是否有一种更简单的方式来表示['id']?因为'id'是一个有效的变量名,它相当于写入
id=231
和['id']=231
。当然,请看,元表无论如何都可以对事物进行散列。注意:Lua中唯一“声明”的是局部变量(与全局变量相反)。而且,Lua中唯一“定义”的是一个函数定义,它在执行时创建一个函数值。您可能指的是“构造”一个表,类似地,它在执行表构造表达式时创建一个表值。