尝试构建一个表,但不断获取具有索引值的数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试构建一个表,但不断获取具有索引值的数组相关的知识,希望对你有一定的参考价值。
所以我正在尝试构建类似的东西(表t0)
{
l1 = {
['t1'] = function(params) print('t1) end,
['t2'] = function(params) print('t2') end
},
l2 = {
['t3'] = function(params) print('t3') end
}
}
但每次发现我都会尝试做类似的事情
t0.l1[#t0.l1+1] = { ['t1'] = function(params) print('t1) end }
它最终成为具有索引值的数组:
l1 table: 0x...
1 table: 0x... ({ ['t1'] = function(params) print('t1) end })
2 table: 0x... ({ ['t2'] = function(params) print('t1) end })
如何插入并创建一个表而不是表数组?
答案
这里有几件要解压的东西,所以这里有:
- 您提到的表是关联数组的关联数组。
- “t0.l1 [#t0.l1 + 1] =”表示“确定我们在数组t0.l1中的哪个记录号,并为其添加一个。然后将RHS分配给该索引。”
根据定义,第2行只会分配给编号的索引,您通过示例说明的不是您想要的。要创建第一个示例中提到的关联数组的关联数组,可以使用以下两种常规方法之一(假设您希望它最终为“t0”):
t0 = {
l1 = {
t1 = function(params) print('t1') end,
t2 = function(params) print('t2') end
},
l2 = {
t3 = function(params) print('t3') end
}
}
要么:
t0 = {}
t0["l1"] = {}
t0["l1"]["t1"] = function(params) print('t1') end
t0["l1"]["t2"] = function(params) print('t2') end
t0["l2"] = {}
t0["l2"]["t3"] = function(params) print('t3') end
(您也可以指定临时值,例如'tmp = {} ... t0 [“l2”] = tmp')
这些中的任何一个都可以得到你想要的东西(假设它是第一个例子中提到的关联数组的关联数组)。
另一答案
当你这样做
t0.l1[#t0.l1+1] = { ['t1'] = function(params) print('t1') end }
您正在t0.l1表的第一个索引中插入新表{t1 = function()end}。发生这种情况是因为#t0.l1 == 0因为到目前为止,你在t0.l1里面有两个由他们自己的键定义的元素(所以你使用t0.l1作为字典)而运算符#只适用于列表(不是字典) 。所以现在你有3个元素,一个在索引1,另一个在索引t1和t2。
以上是关于尝试构建一个表,但不断获取具有索引值的数组的主要内容,如果未能解决你的问题,请参考以下文章