<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://ru.ru-skazki.ru/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="http://ru.ru-skazki.ru/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="http://ru.ru-skazki.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments/doc&amp;action=history"/>
	<updated>2026-05-07T20:31:23Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>http://ru.ru-skazki.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments/doc&amp;diff=4783&amp;oldid=prev</id>
		<title>Импортёр: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="http://ru.ru-skazki.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments/doc&amp;diff=4783&amp;oldid=prev"/>
		<updated>2024-05-01T10:06:50Z</updated>

		<summary type="html">&lt;p&gt;1 версия импортирована&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 13:06, 1 мая 2024&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Импортёр</name></author>
	</entry>
	<entry>
		<id>http://ru.ru-skazki.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments/doc&amp;diff=4782&amp;oldid=prev</id>
		<title>ru&gt;Andras в 10:49, 18 июня 2023</title>
		<link rel="alternate" type="text/html" href="http://ru.ru-skazki.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments/doc&amp;diff=4782&amp;oldid=prev"/>
		<updated>2023-06-18T10:49:04Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Docpage}}&lt;br /&gt;
{{СИШ|nocat=1}}&lt;br /&gt;
{{Рейтинг модуля|protected}}&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(&amp;#039;Module:Arguments&amp;#039;).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(&amp;#039;Module:Arguments&amp;#039;).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(&amp;#039;Module:Arguments&amp;#039;).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(&amp;#039;Module:Arguments&amp;#039;).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(&amp;#039;_func1&amp;#039;)&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(&amp;#039;_func2&amp;#039;)&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;
		&amp;#039;Шаблон:Обёртка&amp;#039;,&lt;br /&gt;
		&amp;#039;Шаблон:Другая обёртка&amp;#039;&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 ~= &amp;#039;&amp;#039; 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, &amp;#039;%S&amp;#039;) 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) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			value = mw.text.trim(value)&lt;br /&gt;
			if value ~= &amp;#039;&amp;#039; 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) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			value = mw.ustring.lower(value)&lt;br /&gt;
			if mw.ustring.find(value, &amp;#039;%S&amp;#039;) 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(&amp;#039;Module:Arguments&amp;#039;).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 &amp;#039;&amp;#039;&lt;br /&gt;
	local second = args[2] or &amp;#039;&amp;#039;&lt;br /&gt;
	return first .. &amp;#039; &amp;#039; .. 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}} используется для указания ограниченного числа шаблонов как &amp;#039;&amp;#039;шаблонов-обёрток&amp;#039;&amp;#039;, то есть шаблонов, чьей единственной целью является вызов модуля. Если модуль обнаружит, что вызывается из шаблона-обёртки, то будут проверяться только аргументы родительского фрейма, иначе будут проверяться только аргументы непосредственного вызывающего фрейма. Это позволяет вызвать модули через {{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}}  &amp;#039;Шаблон:Optp&amp;#039;, код &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 = &amp;#039;Шаблон:Обёртка&amp;#039;&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;
		&amp;#039;Шаблон:Обёртка 1&amp;#039;,&lt;br /&gt;
		&amp;#039;Шаблон:Обёртка 2&amp;#039;,&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 = &amp;#039;some value&amp;#039;&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>ru&gt;Andras</name></author>
	</entry>
</feed>