Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为Lua中的未知索引分配子表_Lua_Lua Table - Fatal编程技术网

为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 这显然是不

我对Lua脚本完全陌生,我正在尝试将索引值分配给空表中的索引,如下所示:

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中唯一“定义”的是一个函数定义,它在执行时创建一个函数值。您可能指的是“构造”一个表,类似地,它在执行表构造表达式时创建一个表值。