Присвоение подтаблиц неизвестным индексам в Lua - PullRequest
0 голосов
/ 03 мая 2018

Я совершенно новичок в Lua Script и пытаюсь присвоить индексированное значение индексу в пустой таблице следующим образом:

table = {}
table[6].id = 231

p.s. приведенный выше код является упрощением более крупного сценария для Digital Combat Simulator с использованием MOOSE Framework.

Я получил следующее сообщение в журнале:

... DCS: Ошибка сценария миссии: ... попытка проиндексировать поле '?' (ноль значение)

Извините, если это выглядит глупо, но я не смог найти, что с ним не так. Мне даже нужно объявить таблицу на первом месте?

Спасибо

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Другой ответ верен, и я рекомендую вам воспользоваться представленным там подходом.


Вы также можете использовать метатаблицы для автоматического создания таблиц для неизвестных индексов.

local create_unknown
create_unknown = {
    __index = function(t,k)
        if not rawget(t,k) then
            rawset(t,k,setmetatable({},create_unknown))
        end
        return rawget(t,k)
    end
}

tab = setmetatable({},create_unknown)

tab[6].id = 231
tab[6].what["is"].happening = 123

print(tab[6].id)
print(tab[6].what["is"].happening)
0 голосов
/ 03 мая 2018

Синтаксис правильный, но вы обращаетесь к нулевому значению: table[6] в настоящее время nil, поэтому ваш код выполняет что-то вроде

nil.id = 231

что, очевидно, невозможно. Сначала определите подтаблицу:

table = {}
table[6] = {}
table[6].id = 231

или используйте конструктор для подтаблицы:

table = {}
table[6] = { id = 231 }

Обратите внимание, что таблица является предопределенной библиотечной таблицей в lua, поэтому вам следует использовать другое имя.

...