<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.dzmuh.com/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AArguments%2Fdoc</id>
	<title>Модуль:Arguments/doc - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.dzmuh.com/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AArguments%2Fdoc"/>
	<link rel="alternate" type="text/html" href="https://wiki.dzmuh.com/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments/doc&amp;action=history"/>
	<updated>2026-05-05T13:03:08Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>https://wiki.dzmuh.com/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments/doc&amp;diff=6194&amp;oldid=prev</id>
		<title>Dzmuh в 22:03, 15 января 2022</title>
		<link rel="alternate" type="text/html" href="https://wiki.dzmuh.com/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments/doc&amp;diff=6194&amp;oldid=prev"/>
		<updated>2022-01-15T22:03:56Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 22:03, 15 января 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l336&quot;&gt;Строка 336:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 336:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;У использования метатаблиц есть свои недостатки. Большинство инструментов для работы с обычными таблицами Lua не будут корректно работать с таблицей {{code|args}}, включая оператор {{code|#}}, функцию {{luacode|next()|inline=1}} и функции из стандартной библиотеки {{code|table}}. Если данные функции необходимы для работы модуля, может понадобиться своя реализация обработки аргументов. Также возможно использование функций из модуля [[Module:TableTools|TableTools]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;У использования метатаблиц есть свои недостатки. Большинство инструментов для работы с обычными таблицами Lua не будут корректно работать с таблицей {{code|args}}, включая оператор {{code|#}}, функцию {{luacode|next()|inline=1}} и функции из стандартной библиотеки {{code|table}}. Если данные функции необходимы для работы модуля, может понадобиться своя реализация обработки аргументов. Также возможно использование функций из модуля [[Module:TableTools|TableTools]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#ifeq:{{SUBPAGENAME}}|sandbox||&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#ifeq:{{SUBPAGENAME}}|sandbox||&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Категория:Модули:Критические]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категория:Модули:Базовые]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категория:Модули:Базовые]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Dzmuh</name></author>
	</entry>
	<entry>
		<id>https://wiki.dzmuh.com/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments/doc&amp;diff=6193&amp;oldid=prev</id>
		<title>Dzmuh: Новая страница: «{{docpage}} &lt;includeonly&gt; {{Модуль из википедии|Arguments}} &lt;/includeonly&gt;  Данный модуль служит для облегчения о...»</title>
		<link rel="alternate" type="text/html" href="https://wiki.dzmuh.com/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments/doc&amp;diff=6193&amp;oldid=prev"/>
		<updated>2022-01-15T22:02:54Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «{{docpage}} &amp;lt;includeonly&amp;gt; {{Модуль из википедии|Arguments}} &amp;lt;/includeonly&amp;gt;  Данный модуль служит для облегчения о...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{docpage}}&lt;br /&gt;
&amp;lt;includeonly&amp;gt;&lt;br /&gt;
{{Модуль из википедии|Arguments}}&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данный модуль служит для облегчения обработки аргументов, передаваемых в {{code|#invoke}}. Это мета-модуль, предназначенный для использования в других модулях, а не вики-страницах напрямую. Его функционал включает:&lt;br /&gt;
* Облегчение обрезки аргументов и удаления пустых аргументов.&lt;br /&gt;
* Аргументы, передаваемые не только текущим фреймов, но и родительским фреймом. (См. ниже)&lt;br /&gt;
* Аргументы, передаваемые из другого модуля или отладочной консоли.&lt;br /&gt;
* Аргументы передаются как надо, что может помочь избежать части проблем с тэгами {{xtag|ref|p}}.&lt;br /&gt;
* Большинство возможностей поддаются настройке.&lt;br /&gt;
&lt;br /&gt;
== Базовое использование ==&lt;br /&gt;
Первым делом, необходимо загрузить модуль. Он содержит всего одну функцию — {{code|getArgs}}.&lt;br /&gt;
{{luacode|1=&lt;br /&gt;
local getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
}}&lt;br /&gt;
В наиболее простом сценарии вы можете использовать {{code|getArgs}} в главной функции вашего модуля. Переменная {{code|args}} содержит таблицу аргументов, переданных в {{code|#invoke}}. &lt;br /&gt;
&lt;br /&gt;
{{luacode|1=&lt;br /&gt;
local getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	-- Основной код модуля.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Тем не менее, принятая практика заключается в использовании функции отдельной функции для получения аргуметов из {{code|#invoke}} и отдельной функции для их обработки — чтобы было проще вызывать ваши функции из другого модуля без передачи аргумента {{code|frame}}, что положительно влияет на производительность.&lt;br /&gt;
&lt;br /&gt;
{{luacode|1=&lt;br /&gt;
local getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	-- Основной код модуля.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Если вам нужно несколько разных функций, использующих аргументы вызова, вы можете использовать функцию-обёртку.&lt;br /&gt;
&lt;br /&gt;
{{luacode|1=&lt;br /&gt;
local getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local function makeInvokeFunc(funcName)&lt;br /&gt;
	return function (frame)&lt;br /&gt;
		local args = getArgs(frame)&lt;br /&gt;
		return p[funcName](args)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.func1 = makeInvokeFunc('_func1')&lt;br /&gt;
&lt;br /&gt;
function p._func1(args)&lt;br /&gt;
	-- Код первой функции.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.func2 = makeInvokeFunc('_func2')&lt;br /&gt;
&lt;br /&gt;
function p._func2(args)&lt;br /&gt;
	-- Код второй функции.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Опции ===&lt;br /&gt;
Доступные опции приведены ниже.&lt;br /&gt;
{{luacode|1=&lt;br /&gt;
local args = getArgs(frame, {&lt;br /&gt;
	trim = false,&lt;br /&gt;
	removeBlanks = false,&lt;br /&gt;
	valueFunc = function (key, value)&lt;br /&gt;
		-- код, обрабатывающий единственный аргумент&lt;br /&gt;
	end,&lt;br /&gt;
	frameOnly = true,&lt;br /&gt;
	parentOnly = true,&lt;br /&gt;
	parentFirst = true,&lt;br /&gt;
	wrappers = {&lt;br /&gt;
		'Шаблон:Обёртка',&lt;br /&gt;
		'Шаблон:Другая обёртка'&lt;br /&gt;
	},&lt;br /&gt;
	readOnly = true,&lt;br /&gt;
	noOverwrite = true&lt;br /&gt;
})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Обрезка и удаление пробелов ===&lt;br /&gt;
Пустые аргументы могут представлять сложность при портировании кода шаблонов на Lua. В синтаксисе шаблонов пустые строки или строки из пробелов приравниваются к {{luafalse}}. В Lua же такие строки соответствуют {{luatrue}}. Поэтому, если вы уделите недостаточно внимания обработке таких аргументов, может нарушиться задуманная логика шаблона. Чтобы избежать такого развития событий, по умолчанию модуль удаляет все пустые аргументы.&lt;br /&gt;
&lt;br /&gt;
Кроме того, пробелы могут вызывать проблемы при обработке позиционных аргументов. При вызове {{code|#invoke}} из именованных параметров пробелы по краям удаляются сами, но сохраняются для позиционных параметров. Большинство таких пробелов на самом деле не нужно, поэтому модуль по умолчанию их обрезает.&lt;br /&gt;
&lt;br /&gt;
Однако же, если требуется сохранить эти пробелы, можно задать опциям {{code|trim}} и {{code|removeBlanks}} значение {{luafalse}}.&lt;br /&gt;
&lt;br /&gt;
{{luacode|1=&lt;br /&gt;
local args = getArgs(frame, {&lt;br /&gt;
	trim = false,&lt;br /&gt;
	removeBlanks = false&lt;br /&gt;
})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Произвольное форматирование аргументов ===&lt;br /&gt;
В некоторых случаях может потребоваться удалить только часть пустых аргументов или, например, привести все позиционные аргументы к нижнему регистру. Для этого можно использовать опцию {{code|valueFunc}}. На вход этой опции должна подавиться функция от двух параметров, {{var|key}} и {{var|value}}, возвращающая единственное значение. Это значение будет записано в поле {{code|key}} таблицы {{code|args}}.&lt;br /&gt;
&lt;br /&gt;
Пример 1: оставлять нетронутыми пробелы в первом позиционном аргументе и применять стандартную обрезку для прочих.&lt;br /&gt;
{{luacode|1=&lt;br /&gt;
local args = getArgs(frame, {&lt;br /&gt;
	valueFunc = function (key, value)&lt;br /&gt;
		if key == 1 then&lt;br /&gt;
			return value&lt;br /&gt;
		elseif value then&lt;br /&gt;
			value = mw.text.trim(value)&lt;br /&gt;
			if value ~= '' then&lt;br /&gt;
				return value&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пример 2: удалить пробельные и пустые аргументы и привести все аргументы к нижнему регистру, но не обрезать пробелы из позиционных аргументов.&lt;br /&gt;
{{luacode|1=&lt;br /&gt;
local args = getArgs(frame, {&lt;br /&gt;
	valueFunc = function (key, value)&lt;br /&gt;
		if not value then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		value = mw.ustring.lower(value)&lt;br /&gt;
		if mw.ustring.find(value, '%S') then&lt;br /&gt;
			return value&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Замечание: функции выше выдадут ошибку, если входные аргументы не будут принадлежать к типу {{code|string}} или {{luanil}}. Это может произойти при вызове функции {{code|getArgs}} из другого модуля. В этом случае требуется проверка типов. В обычном случае при вызове из {{code|#invoke}} такая проблема не стоит.&lt;br /&gt;
&lt;br /&gt;
{{Начало скрытого блока|Примеры 1 и 2 с проверкой типов}}&lt;br /&gt;
Пример 1:&lt;br /&gt;
{{luacode|1=&lt;br /&gt;
local args = getArgs(frame, {&lt;br /&gt;
	valueFunc = function (key, value)&lt;br /&gt;
		if key == 1 then&lt;br /&gt;
			return value&lt;br /&gt;
		elseif type(value) == 'string' then&lt;br /&gt;
			value = mw.text.trim(value)&lt;br /&gt;
			if value ~= '' then&lt;br /&gt;
				return value&lt;br /&gt;
			else&lt;br /&gt;
				return nil&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			return value&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пример 2 2:&lt;br /&gt;
{{luacode|1=&lt;br /&gt;
local args = getArgs(frame, {&lt;br /&gt;
	valueFunc = function (key, value)&lt;br /&gt;
		if type(value) == 'string' then&lt;br /&gt;
			value = mw.ustring.lower(value)&lt;br /&gt;
			if mw.ustring.find(value, '%S') then&lt;br /&gt;
				return value&lt;br /&gt;
			else&lt;br /&gt;
				return nil&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			return value&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
})&lt;br /&gt;
}}&lt;br /&gt;
{{конец скрытого блока}}&lt;br /&gt;
&lt;br /&gt;
Также следует обращать внимание, что функция {{code|valueFunc}} вызывается приблизительно при каждом запросе к таблице {{code|args}}, так что если стоит вопрос производительности, эта функция не должна быть дорогой.&lt;br /&gt;
&lt;br /&gt;
=== Фреймы и родительские фреймы ===&lt;br /&gt;
Аргументы в таблице {{code|args}} могут одновременно передаваться из текущего фрейма и его родительского фрейма. Это можно понять на примере. Например, есть модуль {{code|Module:ExampleArgs}}, работа которого заключается в выводе двух первых переданных позиционных аргументов.&lt;br /&gt;
&lt;br /&gt;
{{Начало скрытого блока|Код модуля ExampleArgs}}&lt;br /&gt;
{{luacode|1=&lt;br /&gt;
local getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	local first = args[1] or ''&lt;br /&gt;
	local second = args[2] or ''&lt;br /&gt;
	return first .. ' ' .. second&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;br /&gt;
}}&lt;br /&gt;
{{конец скрытого блока}}&lt;br /&gt;
&lt;br /&gt;
{{code|Модуль:ExampleArgs}} вызывается шаблоном {{tc|ExampleArgs}}, код которого — {{tc|#invoke:ExampleArgs|main|первый_аргумент_вызова}}. По умолчанию он возвращает текст «первый_аргумент_вызова».&lt;br /&gt;
&lt;br /&gt;
Далее возможны следующие варианты:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 70em; max-width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 60%;&amp;quot; | Код&lt;br /&gt;
! style=&amp;quot;width: 40%;&amp;quot; | Результат&lt;br /&gt;
|-&lt;br /&gt;
| {{tc|ExampleArgs}}&lt;br /&gt;
| первый_аргумент_вызова&lt;br /&gt;
|-&lt;br /&gt;
| {{tc|ExampleArgs|первый_аргумент_вызова}}&lt;br /&gt;
| первый_аргумент_вызова&lt;br /&gt;
|-&lt;br /&gt;
| {{tc|ExampleArgs|первый_аргумент_вызова|второй_аргумент_вызова}}&lt;br /&gt;
| первый_аргумент_вызова второй_аргумент_вызова&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Это поведение можно изменить тремя опциями: {{code|frameOnly}}, {{code|parentOnly}} и {{code|parentFirst}}. При установке {{code|frameOnly}} будут обрабатываться только аргументы фрейма, где происходит непосредственно вызов {{code|#invoke}}; при установке {{code|parentOnly}} будут обрабатываться только аргументы родительского фрейма; при установке {{code|parentFirst}} будут обрабатываться аргументы из обоих фреймов, но в первую очередь родительского. В случае рассматриваемого {{tc|ExampleArgs}} это будет выглядеть так:&lt;br /&gt;
&lt;br /&gt;
; frameOnly&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 70em; max-width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 60%;&amp;quot; | Код&lt;br /&gt;
! style=&amp;quot;width: 40%;&amp;quot; | Результат&lt;br /&gt;
|-&lt;br /&gt;
| {{tc|ExampleArgs}}&lt;br /&gt;
| первый_аргумент_вызова&lt;br /&gt;
|-&lt;br /&gt;
| {{tc|ExampleArgs|первый_аргумент_шаблона}}&lt;br /&gt;
| первый_аргумент_вызова&lt;br /&gt;
|-&lt;br /&gt;
| {{tc|ExampleArgs|первый_аргумент_шаблона|второй_аргумент_шаблона}}&lt;br /&gt;
| первый_аргумент_вызова&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; parentOnly&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 70em; max-width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 60%;&amp;quot; | Код&lt;br /&gt;
! style=&amp;quot;width: 40%;&amp;quot; | Результат&lt;br /&gt;
|-&lt;br /&gt;
| {{tc|ExampleArgs}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| {{tc|ExampleArgs|первый_аргумент_шаблона}}&lt;br /&gt;
| первый_аргумент_шаблона&lt;br /&gt;
|-&lt;br /&gt;
| {{tc|ExampleArgs|первый_аргумент_шаблона|второй_аргумент_шаблона}}&lt;br /&gt;
| первый_аргумент_шаблона второй_аргумент_шаблона&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; parentFirst&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 70em; max-width: 100%;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width: 60%;&amp;quot; | Код&lt;br /&gt;
! style=&amp;quot;width: 40%;&amp;quot; | Результат&lt;br /&gt;
|-&lt;br /&gt;
| {{tc|ExampleArgs}}&lt;br /&gt;
| первый_аргумент_вызова&lt;br /&gt;
|-&lt;br /&gt;
| {{tc|ExampleArgs|первый_аргумент_шаблона}}&lt;br /&gt;
| первый_аргумент_шаблона&lt;br /&gt;
|-&lt;br /&gt;
| {{tc|ExampleArgs|первый_аргумент_шаблона|второй_аргумент_шаблона}}&lt;br /&gt;
| первый_аргумент_шаблона второй_аргумент_шаблона&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Замечания:&lt;br /&gt;
# При установке одновременно опций {{code|frameOnly}} и {{code|parentOnly}} модуль не получит никаких аргументов из {{code|#invoke}}. Так делать не стоит.&lt;br /&gt;
# В некоторых ситуациях родительский фрейм может быть недоступен, например, если он был сразу подан на вход функции {{code|getArgs}}. Тогда могут использоваться лишь аргументы этого фрейма (если установлена опция {{code|parentOnly}}, то никакие аргументы получить не удастся), а {{code|parentFirst}} и {{code|frameOnly}} не будут иметь эффекта.&lt;br /&gt;
&lt;br /&gt;
=== Обёртки ===&lt;br /&gt;
Опция {{var|wrappers}} используется для указания ограниченного числа шаблонов как ''шаблонов-обёрток'', то есть шаблонов, чьей единственной целью является вызов модуля. Если модуль обнаружит, что вызывается из шаблона-обёртки, то будут проверяться только аргументы родительского фрейма, иначе будут проверяться только аргументы непосредственного вызывающего фрейма. Это позволяет вызвать модули через {{code|#invoke}} и через шаблон-обёртку без потери производительности из-за поиска аргументов в двух фреймах.&lt;br /&gt;
&lt;br /&gt;
Например, единственное содержимое шаблона {{tl|optp}} вне тэгов {{tag|noinclude}} это вызов &amp;lt;nowiki&amp;gt;{{#invoke:Template call code|onlyParams}}&amp;lt;/nowiki&amp;gt;. Нет смысла проверять аргументы, передаваемые {{code|#invoke}} на странице шаблона, поскольку там их никогда не будет. Этого можно избежать с помощью опции {{var|parentOnly}}, но тогда {{code|#invoke}} не будет работать и на других страницах. В таком случае параметр {{para|text|Некий текст}} в коде &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:Template call code|onlyParams|text=Некий текст}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; игнорировался бы на всех страницах. Но если мы укажем в опции {{var|wrappers}}  'Шаблон:Optp', код &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:Template call code|onlyParams|text=Некий текст}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; будет работать на всех страницах, не проверяя аргументы на странице шаблона.&lt;br /&gt;
&lt;br /&gt;
Обёртки могут задаваться строкой или массивом строк.&lt;br /&gt;
&lt;br /&gt;
{{luacode|1=&lt;br /&gt;
local args = getArgs(frame, {&lt;br /&gt;
	wrappers = 'Шаблон:Обёртка'&lt;br /&gt;
})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{luacode|1=&lt;br /&gt;
local args = getArgs(frame, {&lt;br /&gt;
	wrappers = {&lt;br /&gt;
		'Шаблон:Обёртка 1',&lt;br /&gt;
		'Шаблон:Обёртка 2',&lt;br /&gt;
		-- Тут может быть задано любое количество шаблонов.&lt;br /&gt;
	}&lt;br /&gt;
})&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Замечания:&lt;br /&gt;
# Модуль автоматически определяет, если вызывается с подстраницы /песочница шаблона-обёртки, такие страницы не надо задавать явным образом.&lt;br /&gt;
# Опция{{var|wrappers}} изменяет поведение по умолчанию опций {{var|frameOnly}} и {{var|parentOnly}}. Например, если {{var|parentOnly}} явным образом установлена в {{luafalse}} при установленных {{var|wrappers}}, вызов через обёртку будет приводить к проверке аргументов текущего и родительского фрейма, тогда как другие вызовы будут проверять только текущие аргументы.&lt;br /&gt;
# Если опция {{var|wrappers}} установлена и родительский фрейм недоступен, модуль всегда будет получать аргументы, переданные функции {{code|getArgs}}.&lt;br /&gt;
&lt;br /&gt;
=== Запись в таблицу args ===&lt;br /&gt;
Иногда может быть полезно записать новые значения в таблицу {{code|args}}. При настройках данного модуля по умолчанию это возможно. (Теме не менее, в большинстве случаев лучшим подходом будет создать новую таблицу с новыми значениями и копировать туда нужные значения {{code|args}}.)&lt;br /&gt;
&lt;br /&gt;
{{luacode|1=&lt;br /&gt;
args.foo = 'some value'&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
С помощью установки опций {{var|readOnly}} и {{var|noOverwrite}} это поведение можно переопределить. Если установлена опция {{var|readOnly}}, в таблицу {{code|args}} нельзя вносить изменения вообще. При установке же опции {{var|noOverwrite}} можно добавлять новые значения, но нельзя менять уже имеющиеся в таблице значения, полученные из  {{code|#invoke}}.&lt;br /&gt;
&lt;br /&gt;
=== Тэги ref ===&lt;br /&gt;
Данный модуль использует [[mw:Extension:Scribunto/Lua reference manual/ru#Metatables|метатаблицы]], чтобы получить аргументы {{code|#invoke}}. Это даёт доступ одновременно к аргументом фрейма и родительского фрейма без использования функции {{luacode|pairs()|inline=1}}. Это может быть полезно при передаче на вход тэгов {{xtag|ref|p}}.&lt;br /&gt;
&lt;br /&gt;
Поскольку из Lua происходит доступ к тэгам {{tag|ref}}, они обрабатываются движком MediaWiki и примечание появляется в списке примечаний ({{tag|referenes|s}}). Если модуль не выводит содержимое тэгов, то может появиться сноска-призрак, отображающаяся только в списке примечаний, но не в основном тексте. Это может являться проблемой для модулей, использующих {{luacode|pairs()|inline=1}} для доступа к аргументам, поскольку эта функция осуществляет доступ ко всем доступным аргументам.&lt;br /&gt;
&lt;br /&gt;
Эта проблема не стоит при использовании данного модуля, поскольку хотя доступ к аргументам производится только по необходимости. Однако же при явном вызове {{luacode|pairs(args)|inline=1}} в коде функций, ошибочное поведение может воспроизводиться.&lt;br /&gt;
&lt;br /&gt;
=== Известные ограничения ===&lt;br /&gt;
У использования метатаблиц есть свои недостатки. Большинство инструментов для работы с обычными таблицами Lua не будут корректно работать с таблицей {{code|args}}, включая оператор {{code|#}}, функцию {{luacode|next()|inline=1}} и функции из стандартной библиотеки {{code|table}}. Если данные функции необходимы для работы модуля, может понадобиться своя реализация обработки аргументов. Также возможно использование функций из модуля [[Module:TableTools|TableTools]].&lt;br /&gt;
&amp;lt;includeonly&amp;gt;{{#ifeq:{{SUBPAGENAME}}|sandbox||&lt;br /&gt;
[[Категория:Модули:Базовые]]&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dzmuh</name></author>
	</entry>
</feed>