kaliuga пишет:table.insert(arr, 1, {[x] = y})
Когда y = 0 пишет bad argument #1 to 'insert' (table expected, got nil
Эта ошибка совсем не про nil в x или y
Такая ошибка возникает в случае, когда arr не есть таблица. А до вызова указанной строки надо переменной arr присвоить таблицу (например, пустую).
Вот такой код уже не будет давать указанную ошибку (обратите внимание на первую строку arr = {}б в ней суть):
arr = {}
x = 2
y = 1
table.insert(arr, 1, {[x] = y})
Добавлю, что добавление в таблицу здесь можно сделать более простым синтаксисом, нежели table.insert, а именно:
arr = {}
x = 2
y = 1
arr[x] = y
kaliuga пишет:В одном операторе, с разных мест прилетает x и y, только одно значение может быть равно nil, пустое, но его надо учитывать.
Если y (т.е. значение) равно nil - то это не проблема. Все работает корректно.
А вот если x равно nil - то тут да, проблема есть, т.к. индекс в таблице не может быть равен nil.
Я бы с таком случае предложил перед добавлением в таблицу таких значений (когда x равно nil) заменять его на какое-то "нереальное" значение, исходя из бизнес-логики. Ну например, если x может быть только положительным по идее в данной части кода - то можно добавить проверку перед вставкой в таблицу:
if x == nil then
x = -1
end
Там, где потом из таблицы значения читаем (или проверяем наличие) - тоже не забыть такую подмену вставить.