К "и так далее до тошноты со случайной, но реальной логикой, чтобы оживить ситуацию" Я предполагаю, что вы имеете в виду, что у вас есть много блоков вроде:
table.insert(datTWrite, {
Type = "type1",
Key = "someKey",
Value = data.SomethingInteresting
})
Единственный аспект этого, который уникален для функции, - это заполняемая таблица и объект data
. Моя личная "лучшая практика" - вынести все это в отдельную таблицу, например:
local entries = {
{
Type = "type1",
Key = "someKey",
ValueField = "SomethingInteresting",
},
{
Type = "type2",
Key = "someOtherKey",
ValueField = "SomethingElse",
},
-- etc.
}
Эта таблица должна быть глобальной или выходить за пределы области, где определена функция. Теперь вы можете легче перенастроить записи, не внося никаких изменений в функцию, выполняющую реальную работу. Сама функция значительно упрощается путем итерации записей таким образом:
for i, entry in ipairs(entries) do
table.insert(datTWrite, {
Type = entry.Type,
Key = entry.Key,
Value = data[entry.ValueField]
})
end
Для "случайной" логики каждая запись может иметь дополнительную функцию, чтобы дать вам интересную информацию в цикле. E.g.:
for i, entry in ipairs(entries) do
if not entry.CheckSomething or entry.CheckSomething() then
table.insert(datTWrite, {
Type = entry.Type,
Key = entry.Key,
Value = data[entry.ValueField]
})
end
end
В качестве альтернативы, вы можете даже разрешить отдельным функциям в таблице выполнять функции BE, если вам нужна дополнительная возможность настройки. Каждая функция ввода будет возвращать таблицу (или нет).
for i, entry in ipairs(entries) do
if type(entry) == "function" then
local newEntry = entry()
if newEntry then
table.insert(datTWrite, newEntry)
end
else
table.insert(datTWrite, {
Type = entry.Type,
Key = entry.Key,
Value = data[entry.ValueField]
})
end
end