Функция для создания таблицы и вставки в нее значения - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть настольные часы, которые я хочу использовать для хранения времени, когда некоторые вещи должны быть выполнены. В одно и то же время может произойти несколько вещей, и у меня нет жестких ограничений на то, как далеко они будут установлены в будущем.

Допустим, я хочу, чтобы действие a1 происходило в момент 5. Использование ...

clock = {}
table.insert(clock[5], a1)

... не будет работать, так как часы [5] не определены и возвращают ноль. Поэтому я создал функцию, чтобы проверить, существует ли таблица, и объявить ее перед вставкой значения:

function insertNil(tab, val)
    if tab == nil then tab = {} end
    table.insert(tab, val)
return 
end

Вызов insertNil(clock[5], a1) тоже не работает, так как таблица tab в функции указывает на другую (если идентична) таблицу из той, которую мне нужно изменить, и я не могу понять, как работать с ней напрямую мой стол clock[5] внутри функции.

В конце концов я придумал это:

function insertNil(tab, val)
    if tab == nil then tab = {} end
    table.insert(tab, val)
return tab
end

clock[5] = insertNil(clock[5], a1)

Это работает так, как я хочу, но это кажется довольно громоздким, и я не могу избавиться от ощущения, что есть более простое решение.

1 Ответ

0 голосов
/ 06 сентября 2018

Более простой способ - написать функцию, которая принимает 3 аргумента. Вы должны передать clock в функцию, потому что функция иногда нуждается в ее изменении.

local function addAction(clock, index, val)
    -- If the table isn't already there, add it.
    clock[index] = clock[index] or {}
    -- Insert the value.
    table.insert(clock[index], val)
end

clock = {}
addAction(clock, 5, a1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...