Lua 将表插入另一个表

如何按功能创建基本表?但我需要通过函数实现,我该怎么做?

local mainMenu = {
  caption = "主窗口",
  description = "测试窗口",
  buttons = {
  { id = 1, value = "信息" },
  { id = 2, value = "返回" },
  { id = 3, value = "确定" },
  { id = 4, value = "取消" }
  },
  popup = true
  }

表应基于外部参数,并为每个选项的变量编写一个表 - 没有更好的方法。我为此创建了一个函数,它应创建基本选项,如标题或描述和弹出窗口,并将值插入按钮表(如果启用该选项-添加按钮)。但在这里出现了问题,它们不会插入到tmp表,按钮表及其值为下一个选项。

   function createMenu()
    tmp = {}
    --buttons insert
   if(config.info) then
    table.insert(tmp, {buttons = {id = 1, value = "信息"}});
   elseif(config.return) then
    table.insert(tmp, {buttons = {id = 2, value = "返回"}});
   end
    --table main
   table.insert(tmp, {
    caption = "主窗口",
    description = "测试窗口",
    popup = true
    })
     return tmp
   end

我该如何修复它们?

点赞
用户234175
用户234175

从你的 createMenu 函数中看出了两个明显的问题:

  1. 每次调用 createMenu 时都将一个新表赋给全局变量 tmp
  2. config 中使用 return 关键字作为一个键。

如果你在 createMenu 函数外的代码中还使用了 tmp,那么第一个问题可能会引起问题。显然的解决方法是改为:

local tmp = {}

对于第二个问题,如果你真的想使用 Lua 关键字作为表键名,那么也可以,但你就不能使用点号语法来访问它了,因为 Lua 会将它解析错误。相反,你需要将其改为:

config["return"].

编辑:在阅读了你的评论并检查了示例表之后,我发现只有 button 表是通过数值下标访问的。在这种情况下,你只需要在 button 上使用 table.insert。如果你想创建具有关联键的表,那么你需要像下面这样做:

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

这将产生你在问题中描述的 mainMenu 表。

2013-06-30 04:27:31