Эта страница содержит несколько сниппетов для Lua, которые могут помочь в создании модулей.
Основные[]
Получаем аргументы напрямую и через трансклюзию.
local p = {}
function p.doStuff(frame)
local transclusionArguments = frame.args
local templateArguments = frame:getParent().args
local templateOption = templateArguments["option"] or ""
local transclusionOption = transclusionArguments["trans_option"] or ""
return transclusionOption .. templateOption
end
return p
Проверка содержит ли таблица значения.
local tTab = {}
if next(tTab) then
mw.log (true)
end
Получаем название страницы, которая вызывает модуль.
local p = {}
function p.frameTitle(frame)
local title = frame:getParent():getTitle()
return (title)
end
return p
Получаем параметр (bool= в данном примере), у которого нет значения и читаем его для того, чтобы задать булевую переменную (localBool в этом примере).
local p = {}
-- Включаем модуль Arguments с dev.fandom.com
local getArgs = require('Dev:Arguments').getArgs
function p.myTemplate(frame) -- Функция для шаблона {{MyTemplate}}
local args = getArgs(frame, {
trim = false,
removeBlanks = false -- Сохраняем пустые параметры
})
local booleanVar = false -- booleanVar по умолчанию "ложь"
-- Задаём booleanVar "истина", если |bool= используется в шаблоне
if args["bool"] then
booleanVar = true
end
return p._myTemplate(args, booleanVar)
end
function p._myTemplate( args, isBool )
local localBool = isBool -- Задаём локальную булевую переменную
local returnWikitext = nil
-- Делаем что-нибудь, используя isBool, и задаём returnWikitext
return returnWikitext
end
Текст[]
Поиск части текста в другом тексте.
local textToFind = "один"
local content = "В конце должен остаться только один"
local startposition , endposition = string.find(content, textToFind)
if startposition then
mw.log (true)
end
Показать только определённое количество токенов (групп символов) из текста.
local text = "Человечество — это болезнь, раковая опухоль планеты, а мы — лекарство."
local tab = mw.text.split( text, " ")
local tokens = 7
local output = ""
for i = 0, tokens do
output = output .. " " .. (tab[i] or "")
end
print(output)
Вывод: Человечество — это болезнь, раковая опухоль планеты,
Математические операции[]
Округление числа.
function p.round(num, idp)
local roundedNumber = tonumber(string.format("%." .. (idp or 0) .. "f", num))
return (roundedNumber)
end
Дата[]
Добавление одного дня к дате.
local iDays = 50
local iDayToSecs = iDays * 24 * 60 *60
local timestamp = os.time({month=12,year=2012,day=10})
local futureDate = os.date("%Y-%m-%d", timestamp + iDayToSecs)
mw.log (futureDate)
Условные операторы[]
Использование тернарного оператора.
local condition = true
local trueText = "Бананы — это хорошо"
local returnText = condition and trueText or ""
-- Возвращает trueText, если условие истинно, иначе ""
mw.log (returnText)
Сортировка[]
Сортировка с использованием ассоциативного массива[1]
function spairs(t, order)
-- Создаём таблицу с ключами
local keys = {}
for k in pairs(t) do keys[#keys+1] = k end
-- Если задан порядок сортировки, сортируем с помощью него
-- Иначе сортируем ключи стандартным методом
if order then
table.sort(keys, function(a,b) return order(t, a, b) end)
else
table.sort(keys)
end
-- Возвращаем функцию, которая перебирает все элементы таблицы
local i = 0
return function()
i = i + 1
if keys[i] then
return keys[i], t[keys[i]]
end
end
end
Использование
local power = { Majin = "11", Buu = "3", Baba = "10" , ["5"] = "ratty", ["8"] = "bum" }
-- Обычное использование — сортировка по ключам
for k,v in spairs(power) do
print(k,v)
end
-- Сортировка по ключам
-- Вывод
-- 5 ratty 8 bum Baba 10 Buu 3 Majin 11
-- Сортировка по значениям
for k,v in spairs(power, function(t,a,b) return t[b] < t[a] end) do
print(k,v)
end
-->5 ratty
-->8 bum
-->Buu 3
-->Majin 11
-->Baba 10
См. также[]
Примечания[]
- ↑ Сортировка таблиц на Lua. http://stackoverflow.com/a/15706820