Добро пожаловать на обновлённую Minecraft Wiki!
Модуль:Специальные утилиты[править введение]
Перейти к навигации
Перейти к поиску
Этот модуль включает в себя различные функции, которые могут использоваться в других модулях. Они либо не реализованы в стандартных библиотеках Lua/Scribunto, либо реализованы недостаточно эффективно.
local p = {}
-- Пытается загрузить данные из модуля, возвращает nil в случае ошибки.
-- Предпочтительнее, чем чтение дорогостоящего свойства mw.title.exists
function p.tryLoadData(moduleName)
local success, data = pcall(
function()
return mw.loadData(moduleName)
end
)
return success and data or nil
end
-- Аналог tryLoadData для JSON-страниц
function p.tryLoadJsonData(moduleName)
local success, data = pcall(
function()
return mw.loadJsonData(moduleName)
end
)
return success and data or nil
end
-- Объединяет список с материнской таблицей,
-- либо добавляет туда строку или дочернюю таблицу
function p.mergeList(parentTable, content)
local i = #parentTable + 1
if content[1] then
-- Добавить все элементы списка в таблицу
for _, v in ipairs(content) do
parentTable[i] = v
i = i + 1
end
else
-- Добавлить строку либо таблицу в материнскую таблицу
parentTable[i] = content
end
end
-- Добавление именованных значений, с обработкой повторяющихся ключей
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
return p