Lua将表格插入到表格中

6

基本表格,应该是这样的。但我需要通过函数来完成,我该怎么做?

local mainMenu = {
  caption = "Main Window",
  description = "test window",
  buttons = {
  { id = 1, value = "Info" },
  { id = 2, value = "Return" },
  { id = 3, value = "Ok" },
  { id = 4, value = "Cancel" }
  },
  popup = true
  }

表格应该基于外部参数,并且为每个选项变量编写一个表格 - 没有更好的方法。我已经为此编写了一个函数,它们应该创建基本选项,如标题或说明,并弹出对话框,并将值插入到按钮表格中(如果选项启用-添加按钮)。但这里的问题是,它们不会将下一个选项的按钮表格和其值插入到临时表格中。

   function createMenu()
    tmp = {}
    --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
    --table main
   table.insert(tmp, {
    caption = "Main Window",
    description = "test window",
    popup = true
    })
     return tmp
   end

我该如何修复它们?

config.return 不是有效的代码,因为 return 是 Lua 的关键字。请尝试使用 config["return"] - greatwolf
1个回答

5

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

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

如果在createMenu函数之外的代码中使用tmp,则可能会导致问题。显而易见的解决方法是将其更改为:

local tmp = {}

针对第二个问题,如果您确实需要使用Lua关键字作为表键,则可以这样做。但是,由于Lua会将其解析错误,因此您将无法使用“.”点语法来访问它。相反,您需要更改:

config.return

to

config["return"].

编辑: 阅读您的评论并检查示例表后,看起来只有按钮表是通过数字索引访问的。在这种情况下,您需要仅在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 表格。

是的,你说得对,但上面的表只是举例。所以createMenu函数应该创建一个表格,使用方法window = createMenu()并通过函数发送window - doCreateWindow(window,param1,callback)。CreateMenu返回表格。这里的问题是将按钮表格和它们的值基于选项/外部数据插入到tmp表中(因为对我来说,table.insert(tmp,{buttons [2] = {id = 4,value =“文本”}})无法正常工作)。 - Happy Day
table.insert 仅适用于表的索引部分。换句话说,在执行 table.insert 后,您的按钮表将位于 tmp[1]tmp[2] 等位置。使用点语法或 [] 语法按关联键插入。 - greatwolf
测试过程中,应用程序因lua崩溃而出现错误模块名称:lua5.1.dll。它们看起来是正确的方式,但是这里出了一些问题,因为lua5.1.dll在这里崩溃了。 - Happy Day
@HappyDay,如果您正在使用Lua解释器测试脚本,那绝对不应该发生这种情况。Lua是一种安全的语言,任何脚本错误都会给出问题的堆栈跟踪 - 而不是从dll崩溃并导致核心转储。您是否将Lua嵌入到另一个主机应用程序中? - greatwolf
@HappyDay 注意,在您的createMenu函数中使用了嵌套if语句,因此最多只能有一个选项。您需要取消嵌套以允许多个按钮选项。 - greatwolf
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接