Fandom Developers Wiki

Эта страница содержит несколько сниппетов для 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

См. также[]

Примечания[]

  1. Сортировка таблиц на Lua. http://stackoverflow.com/a/15706820