5

Basic table, how they should be. But me need do it by function, how i can do that?

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
  }

Table should be based on outside params, and code one table for each variable of options - not better way. I make a function for that, they should create basic options like caption or description and pop up, and insert values to buttons table (if option enabled - add button). But here the problem, they wont insert to tmp table, buttons table and their values for next options.

   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

How i can fixing them?

4

1 に答える 1

5

関数を見るとcreateMenu、2 つの明らかな問題が突き出ています。

  1. が呼び出されるたびにグローバル に新しいテーブルを割り当てます。tmpcreateMenu
  2. returnのキーとしてキーワードを使用しますconfig

tmp関数の外側のコードで別の場所を使用すると、問題が発生する可能性がありcreateMenuます。明らかな修正は、次のように変更することです。

local tmp = {}

2 番目の問題については、必要に応じて lua キーワードをテーブル キーとして使用でき.ますが、Lua がこれを間違った方法で解析するため、ドット構文を使用してこれにアクセスすることはできません。代わりに、次のように変更する必要があります。

config.return

config["return"].

編集:コメントを読んでサンプルテーブルを確認した後、ボタンテーブルのみが数値インデックスによってアクセスされるようです。その場合、table.inserton のみを使用する必要がありますbutton。連想キーを持つテーブルを作成する場合は、次のようにする必要があります。

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-30T04:27:31.010 に答える