Заполнение таблиц данными
Нередко встает задача заполнить таблицу данными.
Допустим, нам нужно создать список параметров.
Каждый параметр — это таблица вида:
{
name = 'Name',
value = '',
type = 'string',
}
Соответственно, список параметров будет выглядеть как-то так:
{
{
name = 'Name',
value = '',
type = 'string',
},
{
name = 'Order',
value = 1,
type = 'number',
},
{
name = 'File',
value = 'default.lua',
type = 'string',
},
}
Если параметров много, то для удобства заполнения я создаю функцию:
local function createParameter(name, value, type) return { name = name, value = value, type = type, } end
Список параметров начинает выглядеть так:
{
createParameter('Name', '', 'string'),
createParameter('Order', 1, 'number'),
createParameter('File', 'default.lua', 'string'),
}
Однако, если параметров в функцию передается много, то при добавлении новой записи часто трудно понять, какой параметр за какое поле отвечает. Чтобы облегчить себе задачу, я в таблицу данных добавляю функции заполнения параметров:
local function Property(name) return { name = name, Value = function(self, value) self.value = value return self end, Type = function(self, type) self.type = type return self end, } end
Теперь заполнение таблицы параметров выглядит так:
{
Property('Name') :Value('') :Type('string'),
Property('Order') :Value(1) :Type('number'),
Property('File') :Value('default.lua') :Type('string'),
}
Теперь каждый параметр подписан, а если есть опциональные поля, то их можно пропустить, а не писать такое:
createParameter('Name', '', nil, nil, nil, 'string'),
PS
Не помню, сам я это придумал, или где-то украл 🙂
5 комментариев