<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://station14.ru/history/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments/doc?feed=atom</id>
	<title>Модуль:Arguments/doc - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://station14.ru/history/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments/doc?feed=atom"/>
	<link rel="alternate" type="text/html" href="https://station14.ru/history/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments/doc"/>
	<updated>2026-05-26T02:28:49Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://station14.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments/doc&amp;diff=78744&amp;oldid=prev</id>
		<title>Pok: Новая страница: «{{docpage}} {{СИШ|nocat=1}} {{module rating|protected}} {{Используйте песочницу}} Данный модуль служит для облегчения обработки аргументов, передаваемых в {{code|#invoke}}. Это мета-модуль, предназначенный для использования в других модулях, а не вики-страницах напрямую. Его функцио...»</title>
		<link rel="alternate" type="text/html" href="https://station14.ru/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments/doc&amp;diff=78744&amp;oldid=prev"/>
		<updated>2025-04-08T22:50:17Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «{{docpage}} {{СИШ|nocat=1}} {{module rating|protected}} {{Используйте песочницу}} Данный модуль служит для облегчения обработки аргументов, передаваемых в {{code|#invoke}}. Это мета-модуль, предназначенный для использования в других модулях, а не вики-страницах напрямую. Его функцио...»&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;
{{module rating|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>Pok</name></author>
	</entry>
</feed>