2013-06-30 5 views
4

Базовая таблица, как они должны быть. Но мне нужно делать это по функциям, как я могу это сделать?Lua Вставить таблицу в таблицу

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 
    } 

Таблица должна основываться на внешних параметрах и кодировать одну таблицу для каждой переменной параметров - не лучший способ. Я делаю для этого функцию, они должны создавать базовые параметры, такие как заголовок или описание и всплывающие окна, и вставлять значения в таблицу кнопок (если опция включена - кнопка добавления). Но здесь проблема, они не будут вставлять в таблицу tmp, таблицу кнопок и их значения для следующих параметров.

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 

Как я могу их исправить?

+0

'config.return' недействителен, так как' return' является ключевым словом lua. Попробуйте 'config [" return "]'. – greatwolf

ответ

4

Глядя на вашей createMenu функции, две очевидные проблемы торчат:

  1. присваивание глобальнойtmp новую таблицу каждый раз, когда createMenu это называется.
  2. с использованием ключевого слова return в качестве ключа в config.

Можно быть проблемой, если вы используете tmp где-нибудь еще в вашем коде вне функции createMenu. Очевидное исправление изменить его на:

local tmp = {} 

Для второй задачи, вы можете использовать Lua ключевое слово в качестве ключа таблицы, если вы действительно хотите, но вы не будете иметь возможность использовать синтаксис . точка чтобы получить доступ к этому, поскольку Lua проанализирует это неправильно. Вместо этого вам нужно изменить:

config.return 

в

config["return"]. 

Edit: После прочтения вашего комментария и проверки пример таблицы, это выглядит как только таблица кнопка доступна по числовому индексу. В этом случае вы хотите использовать table.insert только на 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 таблицу, которую вы описываете в своем вопросе.

+0

да, вы правы, но верхний стол - только, к примеру. Таким образом, функция createMenu должна создавать таблицу, а окно использования = createMenu() и отправлять окно по функции - doCreateWindow (window, param1, callback). CreateMenu - таблица возврата. И здесь проблема - вставить в таблицу таблиц таблицы tmp и их значения на основе параметров/внешних данных (проблемы со вставкой, becouse table.insert (tmp, {buttons [2] = {id = 4, value = "Text"} }) не работает для меня) –

+0

@HappyDay Вам нужно будет лучше прояснить проблему, с которой вы сталкиваетесь. Каков ожидаемый результат после вызова 'createMenu'? Как вы ожидаете, что таблица вернется, чтобы выглядеть? Что вы на самом деле получаете вместо этого? – greatwolf

+0

Итак, проблемы только с table.insert, я не могу вставить значения в таблицу - кнопки внутри таблицы tmp = ( –

Смежные вопросы