Нет описания правки |
(исправление последствий моей рассеянности) |
||
Строка 37: | Строка 37: | ||
for i, t in ipairs(tables) do |
for i, t in ipairs(tables) do |
||
if type(t) == 'table' then |
if type(t) == 'table' then |
||
− | for k, v in pairs( |
+ | for k, v in pairs(t) do |
if type(k) == 'number' then |
if type(k) == 'number' then |
||
table.insert(newt, v) |
table.insert(newt, v) |
Текущая версия от 18:42, 24 апреля 2019
Этот модуль включает в себя различные функции, которые могут использоваться в других модулях. Они либо не реализованы в стандартных библиотеках Lua/Scribunto, либо реализованы недостаточно эффективно.
local p = {}
-- Добавление именованных значений, с обработкой повторяющихся ключей
local function tryInsertKey(thetable, key, value, strict)
local try = 1
local inserted = false
local _key = key
repeat
if thetable[_key] == nil then
table.insert(thetable, _key, value)
inserted = true
else
if strict then
error("Ключ " .. key .. " встречается в нескольких таблицах при том, что их обработка здесь была запрещена.")
else
try = try + 1
_key = key .. try
end
end
until inserted
end
-- Объединяет несколько таблиц вместе.
function p.jointables(tables, strict)
local newt = {}
if #tables == 1 then
return tables[1]
elseif #tables == 0 then
return {}
end
if strict == nil then
strict = false
end
for i, t in ipairs(tables) do
if type(t) == 'table' then
for k, v in pairs(t) do
if type(k) == 'number' then
table.insert(newt, v)
else
tryInsertKey(newt, k, v, strict)
end
end
else
error("Среди таблиц обнаружен объект, таблицей не являющейся.")
end
end
return newt
end