所以我正在尝试构建类似的东西(表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 })
如何插入并创建一个表而不是表数组?
答案 0 :(得分:0)
当你这样做时
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 。
答案 1 :(得分:0)
这里要解开几件事,所以这里有:
根据定义,第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')
其中任何一个都能得到你想要的东西(假设它是第一个例子中提到的关联数组的关联数组)。