Модуль:Arguments/doc
Это страница документации Модуль:Arguments.
Данный модуль служит для облегчения обработки аргументов, передаваемых в #invoke. Это мета-модуль, предназначенный для использования в других модулях, а не вики-страницах напрямую. Его функционал включает:
- Облегчение обрезки аргументов и удаления пустых аргументов.
- Аргументы, передаваемые не только текущим фреймов, но и родительским фреймом. (См. ниже)
- Аргументы, передаваемые из другого модуля или отладочной консоли.
- Большинство возможностей поддаются настройке.
Базовое использование
Первым делом, необходимо загрузить модуль. Он содержит всего одну функцию — getArgs.
local getArgs = require('Module:Arguments').getArgsВ наиболее простом сценарии вы можете использовать getArgs в главной функции вашего модуля. Переменная args содержит таблицу аргументов, переданных в #invoke.
local getArgs = require('Module:Arguments').getArgs
local p = {}
function p.main(frame)
local args = getArgs(frame)
-- Основной код модуля.
end
return pТем не менее, принятая практика заключается в использовании функции отдельной функции для получения аргуметов из #invoke и отдельной функции для их обработки — чтобы было проще вызывать ваши функции из другого модуля без передачи аргумента frame, что положительно влияет на производительность.
local getArgs = require('Module:Arguments').getArgs
local p = {}
function p.main(frame)
local args = getArgs(frame)
return p._main(args)
end
function p._main(args)
-- Основной код модуля.
end
return pЕсли вам нужно несколько разных функций, использующих аргументы вызова, вы можете использовать функцию-обёртку.
local getArgs = require('Module:Arguments').getArgs
local p = {}
local function makeInvokeFunc(funcName)
return function (frame)
local args = getArgs(frame)
return p[funcName](args)
end
end
p.func1 = makeInvokeFunc('_func1')
function p._func1(args)
-- Код первой функции.
end
p.func2 = makeInvokeFunc('_func2')
function p._func2(args)
-- Код второй функции.
end
return pОпции
Доступные опции приведены ниже.
local args = getArgs(frame, {
trim = false,
removeBlanks = false,
valueFunc = function (key, value)
-- код, обрабатывающий единственный аргумент
end,
frameOnly = true,
parentOnly = true,
parentFirst = true,
wrappers = {
'Шаблон:Обёртка',
'Шаблон:Другая обёртка'
},
readOnly = true,
noOverwrite = true
})Обрезка и удаление пробелов
Пустые аргументы могут представлять сложность при портировании кода шаблонов на Lua. В синтаксисе шаблонов пустые строки или строки из пробелов приравниваются к Шаблон:Luafalse. В Lua же такие строки соответствуют Шаблон:Luatrue. Поэтому, если вы уделите недостаточно внимания обработке таких аргументов, может нарушиться задуманная логика шаблона. Чтобы избежать такого развития событий, по умолчанию модуль удаляет все пустые аргументы.
Кроме того, пробелы могут вызывать проблемы при обработке позиционных аргументов. При вызове #invoke из именованных параметров пробелы по краям удаляются сами, но сохраняются для позиционных параметров. Большинство таких пробелов на самом деле не нужно, поэтому модуль по умолчанию их обрезает.
Однако же, если требуется сохранить эти пробелы, можно задать опциям trim и removeBlanks значение Шаблон:Luafalse.
local args = getArgs(frame, {
trim = false,
removeBlanks = false
})Произвольное форматирование аргументов
В некоторых случаях может потребоваться удалить только часть пустых аргументов или, например, привести все позиционные аргументы к нижнему регистру. Для этого можно использовать опцию valueFunc. На вход этой опции должна подавиться функция от двух параметров, Шаблон:Var и Шаблон:Var, возвращающая единственное значение. Это значение будет записано в поле key таблицы args.
Пример 1: оставлять нетронутыми пробелы в первом позиционном аргументе и применять стандартную обрезку для прочих.
local args = getArgs(frame, {
valueFunc = function (key, value)
if key == 1 then
return value
elseif value then
value = mw.text.trim(value)
if value ~= '' then
return value
end
end
return nil
end
})Пример 2: удалить пробельные и пустые аргументы и привести все аргументы к нижнему регистру, но не обрезать пробелы из позиционных аргументов.
local args = getArgs(frame, {
valueFunc = function (key, value)
if not value then
return nil
end
value = mw.ustring.lower(value)
if mw.ustring.find(value, '%S') then
return value
end
return nil
end
})Замечание: функции выше выдадут ошибку, если входные аргументы не будут принадлежать к типу string или Шаблон:Luanil. Это может произойти при вызове функции getArgs из другого модуля. В этом случае требуется проверка типов. В обычном случае при вызове из #invoke такая проблема не стоит.
| Примеры 1 и 2 с проверкой типов | ||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Пример 1: local args = getArgs(frame, {
valueFunc = function (key, value)
if key == 1 then
return value
elseif type(value) == 'string' then
value = mw.text.trim(value)
if value ~= '' then
return value
else
return nil
end
else
return value
end
end
})Пример 2 2: local args = getArgs(frame, {
valueFunc = function (key, value)
if type(value) == 'string' then
value = mw.ustring.lower(value)
if mw.ustring.find(value, '%S') then
return value
else
return nil
end
else
return value
end
end
})Также следует обращать внимание, что функция Фреймы и родительские фреймыАргументы в таблице
|