Модуль:Специальные утилиты

Материал из Playzone Minecraft Wiki
Версия от 18:39, 21 июля 2016; NickTheRed37 (обсуждение)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Для документации этого модуля может быть создана страница Модуль:Специальные утилиты/doc

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(tables) 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