Lua将表插入到表

Lua将表插入到表,lua,lua-table,Lua,Lua Table,基本表格,它们应该是怎样的。但是我需要用函数来做,我怎么能做到呢 本地主菜单={ caption=“主窗口”, description=“测试窗口”, 按钮={ {id=1,value=“Info”}, {id=2,value=“Return”}, {id=3,value=“Ok”}, {id=4,value=“Cancel”} }, 弹出=真 } 表应该基于外部参数,并为选项的每个变量编码一个表——这不是更好的方法。我为此创建了一个函数,它们应该创建基本选项,如标题或描述和弹出窗口,并将值插

基本表格,它们应该是怎样的。但是我需要用函数来做,我怎么能做到呢

本地主菜单={
caption=“主窗口”,
description=“测试窗口”,
按钮={
{id=1,value=“Info”},
{id=2,value=“Return”},
{id=3,value=“Ok”},
{id=4,value=“Cancel”}
},
弹出=真
}
表应该基于外部参数,并为选项的每个变量编码一个表——这不是更好的方法。我为此创建了一个函数,它们应该创建基本选项,如标题或描述和弹出窗口,并将值插入按钮表(如果启用了选项,则为addbutton)。但这里的问题是,它们不会插入到tmp表、按钮表以及下一个选项的值中

函数createMenu()
tmp={}
--按钮插入
如果是(config.info),那么
insert(tmp,{buttons={id=1,value=“Info”});
elseif(config.return)然后
insert(tmp,{buttons={id=2,value=“Return”});
结束
--主表
表.插入(tmp{
caption=“主窗口”,
description=“测试窗口”,
弹出=真
})
返回tmp
结束

如何修复它们?

从查看您的
createMenu
函数可以看出两个明显的问题:

  • 每次执行
    createMenu
    操作时,为全局
    tmp
    分配一个新表 打电话来
  • 使用
    return
    关键字作为
    config
    中的键
  • 如果在
    createMenu
    函数之外的代码中的其他地方使用
    tmp
    ,则可能会出现问题。显而易见的解决办法是将其更改为:

    local tmp = {}
    
    对于第二个问题,如果确实需要,可以使用lua关键字作为表键,但是不能使用
    点语法来访问它,因为lua将以错误的方式解析它。相反,您需要更改:

    config.return
    

    编辑:阅读您的评论并检查示例表后,看起来只有按钮表可以通过数字索引访问。在这种情况下,您需要使用
    表。仅在
    按钮上插入
    。如果要创建具有关联键的表,则必须执行以下操作:

    function createMenu()
      local tmp = 
      {
        --table main
        caption = "Main Window",
        description = "test window",
        popup = true,
        --button table
        buttons = {}
      }
      --buttons insert
      if config.info then
        table.insert(tmp.buttons, {id = 1, value = "Info"});
      elseif config['return']  then
        table.insert(tmp.buttons, {id = 2, value = "Return"});
      end
    
      return tmp
    end
    

    这将生成您在问题中描述的
    main菜单
    表。

    config.return
    无效,因为
    return
    是lua关键字。请尝试
    config[“return”]
    。是的,您是对的,但位于表的顶部-仅举个例子。所以createMenu函数应该创建表,使用window=createMenu()并通过函数-doCreateWindow(window,param1,callback)发送window。CreateMenu-返回表。这里的问题是,insert to tmp table-buttons table及其基于选项/外部数据的值(insert的问题,becouse table.insert(tmp,{buttons[2]={id=4,value=“Text”}})对我不起作用)@HappyDay您必须更好地澄清您遇到的问题。调用
    createMenu
    后的预期输出是什么?你认为返回的桌子会是什么样子?实际上您得到了什么?因此,只有table.insert存在问题,我无法将值插入到table中-table中的按钮tmp=(
    table.insert
    仅用于表的索引部分。换句话说,在执行
    table.insert
    之后,您的按钮表将位于
    tmp[1]
    tmp[2]
    等。使用点语法或
    []
    语法通过关联键插入。因此,我可以使用该函数?table.insert(tmp.buttons,{id=1,value=“text”}),它们会工作吗?
    function createMenu()
      local tmp = 
      {
        --table main
        caption = "Main Window",
        description = "test window",
        popup = true,
        --button table
        buttons = {}
      }
      --buttons insert
      if config.info then
        table.insert(tmp.buttons, {id = 1, value = "Info"});
      elseif config['return']  then
        table.insert(tmp.buttons, {id = 2, value = "Return"});
      end
    
      return tmp
    end