Заполнение таблицы через функцию

caing

Участник
Автор темы
35
4
Версия MoonLoader
.026-beta
Есть некая таблица
Lua:
myTable = {}

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

Сейчас таблица заполняется копированием кода (возможно это какой-то говнокод, но смог только так, да)
Lua:
if myTable.Vehicle ~= nil then -- если существует подтаблица транспорта
    if myTable.Vehicle.Hp ~= nil then -- если существует значение с хп транспорта
        myTable.Vehicle.Hp = myTable.Vehicle.Hp + hpValue -- добавляем наше значение, к уже существующему в таблице
    else -- если в таблице транспорта не существует значения с хп транспорта
        myTable.Vehicle.Hp = hpValue -- создаем значение с хп транспорта в подтаблице vehicle
    end
else -- если не существует подтаблицы vehicle
    myTable.Vehicle = {Hp = hpValue} -- создаем подтаблицу vehicle и в значение записываем хп
end

Так вот, как это преобразовать в функцию, ибо вместо Vehicle и Hp могут быть любые названия.
 
Решение
если я правильно понял, что ты хочешь, то как-то так это можно реализовать:
Lua:
function foo(t, i, j, v)
    if t[i] == nil then
        t[i] = { [j] = v }
    else
        t[i][j] = (t[i][j] == nil) and v or (t[i][j] + v)
    end
end

local myTable = {}

foo(myTable, "Vehicle", "Hp", 100)
print(myTable.Vehicle.Hp) -- 100

foo(myTable, "Vehicle", "Hp", -50)
print(myTable.Vehicle.Hp) -- 50

wojciech?

Известный
206
120
если я правильно понял, что ты хочешь, то как-то так это можно реализовать:
Lua:
function foo(t, i, j, v)
    if t[i] == nil then
        t[i] = { [j] = v }
    else
        t[i][j] = (t[i][j] == nil) and v or (t[i][j] + v)
    end
end

local myTable = {}

foo(myTable, "Vehicle", "Hp", 100)
print(myTable.Vehicle.Hp) -- 100

foo(myTable, "Vehicle", "Hp", -50)
print(myTable.Vehicle.Hp) -- 50
 
  • Влюблен
Реакции: caing

caing

Участник
Автор темы
35
4
если я правильно понял, что ты хочешь, то как-то так это можно реализовать:
Lua:
function foo(t, i, j, v)
    if t[i] == nil then
        t[i] = { [j] = v }
    else
        t[i][j] = (t[i][j] == nil) and v or (t[i][j] + v)
    end
end

local myTable = {}

foo(myTable, "Vehicle", "Hp", 100)
print(myTable.Vehicle.Hp) -- 100

foo(myTable, "Vehicle", "Hp", -50)
print(myTable.Vehicle.Hp) -- 50
Огромное спасибо, я пробовал подобный вариант, но немного с ошибкой, поэтому и не получалось!