尝试构建一个表,但不断获取具有索引值的数组

时间:2017-12-27 20:56:52

标签: lua

所以我正在尝试构建类似的东西(表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 })

如何插入并创建一个表而不是表数组?

2 个答案:

答案 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)

这里要解开几件事,所以这里有:

  1. 您提到的表是关联数组的关联数组。
  2. “t0.l1 [#t0.l1 + 1] =”表示“确定我们在数组t0.l1中的哪个记录号并添加一个。然后将RHS分配给该索引。”
  3. 根据定义,第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')

    其中任何一个都能得到你想要的东西(假设它是第一个例子中提到的关联数组的关联数组)。