<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Как понять, что скрипт загружен через require?]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Как понять, что скрипт загружен через require? форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Fri, 17 Apr 2026 06:58:58 +0300</pubDate>
		<item>
			<title>Как понять, что скрипт загружен через require?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message52441/topic6131/">Как понять, что скрипт загружен через require?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			При загрузке скрипта как модуля, в него первым аргументом передаётся название модуля. Функция loadfile загружает файл в виде метода, который можно выполнить с аргументами. Функция dofile автоматически исполняет файл без аргументов. Таким способом можно отличить метод загрузки.<br /><br />
====code====
<pre>require ( 'test' ) ( 'require' )
loadfile ( 'test.lua' )( 'foo' )( 'loadfile' )dofile ( 'test.lua' ) ( 'dofile' )
</pre>
=============
<p>test.lua</p>
====code====
<pre>local args = { ... or 'no arguments' }
for k, v in pairs ( args ) do print ( k, v ) end
return function ( s ) print ( s ) end</pre>
=============
вывод:
====code====
<pre>1&nbsp;&nbsp; test
require
1&nbsp;&nbsp; foo
loadfile
1&nbsp;&nbsp; no arguments
dofile
</pre>
=============
Всегда загружайте скрипты как модули, то есть с помощью функции require. Это исключает повторное исполнение кода в файле и перезапись измененных значений на исходные. Обратите внимание, что require не принимает путь к файлу, а только название модуля. Точка и расширение файла не указываются (можно таже загрузить совместимые .dll и .so) и если модуль расположен внутри папки, то разделителем нужно использовать точку а не слэш.<br />
====code====
<pre>--/module/interpreted.lua
--/module/HWaccelerated.dll
require ( 'module.interpreted' )
require ( 'module.HWaccelerated' )
</pre>
============= <br />
			<i>03.02.2021 04:26:21, Артем.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message52441/topic6131/</link>
			<guid>http://forum.quik.ru/messages/forum10/message52441/topic6131/</guid>
			<pubDate>Wed, 03 Feb 2021 04:26:21 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как понять, что скрипт загружен через require?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51886/topic6131/">Как понять, что скрипт загружен через require?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_77SLBlUy" href="/user/14016/" bx-tooltip-user-id="14016">Незнайка</a> написал:<br />В Lua 5.1 можно было заглянуть в package.loaded&#91;modname&#93;.<br />Если там userdata, то скрипт загружен через require, иначе - запущен сам.<br />А теперь как?<br />=============<br />Незнайка, вы в скрипте, который может запускать рассматриваемый модуль, поставьте флаг и проверяйте его в модуле. Если модуль флаг не видит, значит он сам запущен, а если видит, то снаружи. <br />
			<i>18.01.2021 19:39:36, Игорь М.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51886/topic6131/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51886/topic6131/</guid>
			<pubDate>Mon, 18 Jan 2021 19:39:36 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как понять, что скрипт загружен через require?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51861/topic6131/">Как понять, что скрипт загружен через require?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_fHN889dH" href="/user/14016/" bx-tooltip-user-id="14016">Незнайка</a> написал:<br /><B><U>Внутри модуля</U></B> определить, каким образом он был запущен.<br />=============<br />Вы же смотрите в скрипте, загружающем модуль. <br />
			<i>18.01.2021 08:52:38, Незнайка.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51861/topic6131/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51861/topic6131/</guid>
			<pubDate>Mon, 18 Jan 2021 08:52:38 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как понять, что скрипт загружен через require?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51853/topic6131/">Как понять, что скрипт загружен через require?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день.<br /><br />Проверили у себя. Такой скрипт работает:<br /><br /><img src="https://d.radikal.ru/d24/2101/b6/2b16c1638af6.png" alt="Пользователь добавил изображение" border="0" /><br /><br /><br />====quote====<br /><p>if _VERSION == &#39;Lua 5.3&#39; then</p><p> &nbsp;package.cpath = getScriptPath() .. &quot;\\lib_x64_53\\?.dll;&quot; .. package.cpath</p><p>elseif _VERSION == &#39;Lua 5.4&#39; then</p><p> &nbsp;package.cpath = getScriptPath() .. &quot;\\lib_x64_54\\?.dll;&quot; .. package.cpath</p><p>end</p><p> </p><p>package.path = getScriptPath() .. &quot;\\lualib\\?.lua;&quot; .. package.path</p><p> </p><p>dll_module_name = &quot;luasql.odbc&quot;</p><p>lua_module_name = &quot;mymodule&quot;</p><p> </p><p>driver = require(dll_module_name)</p><p> </p><p>if package.loaded&#91;dll_module_name&#93; == nil then</p><p> message(&quot;DLL модуль запущен напрямую &quot; .. _VERSION)</p><p>else</p><p> &nbsp;message(&quot;DLL модуль загружен через require &quot; .. _VERSION)</p><p>end</p><p> </p><p>mymod = require(lua_module_name)</p><p> </p><p>if package.loaded&#91;lua_module_name&#93; == nil then</p><p> message(&quot;Lua модуль запущен напрямую &quot; .. _VERSION)</p><p>else</p><p> &nbsp;message(&quot;Lua модуль загружен через require &quot; .. _VERSION)</p><p>end</p><p> </p>=============<br /> <br />
			<i>18.01.2021 06:43:45, Egor Zaytsev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51853/topic6131/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51853/topic6131/</guid>
			<pubDate>Mon, 18 Jan 2021 06:43:45 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как понять, что скрипт загружен через require?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51782/topic6131/">Как понять, что скрипт загружен через require?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_xIEvu173" href="/user/19/" bx-tooltip-user-id="19">Egor Zaytsev</a> написал:<br />что именно нужно<br />=============<br />Внутри модуля определить, каким образом он был запущен.<br />В Lua 5.1 работал такой способ:<br />
====code====
<pre>if package.loaded&#91;modname&#93; == nil then
&nbsp;&nbsp;print("Скрипт запущен напрямую")
else
&nbsp;&nbsp;print("Скрипт загружен через require")
end</pre>
=============
<br />В Lua 5.4 внутри самого модуля package.loaded[modname] = nil в любом случае. <br />
			<i>15.01.2021 13:00:55, Незнайка.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51782/topic6131/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51782/topic6131/</guid>
			<pubDate>Fri, 15 Jan 2021 13:00:55 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как понять, что скрипт загружен через require?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51775/topic6131/">Как понять, что скрипт загружен через require?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день.<br /><br />Через require подтягиваются модули, внешние dll или же обычные Lua модули. Если модуль в таблице package.loaded, значит он загружен.<br />Не совсем понятно, что именно нужно.<br />Возможно Вам поможет &nbsp;вот это описание <noindex><a href="http://www.lua.org/manual/5.4/manual.html" target="_blank" rel="nofollow">http://www.lua.org/manual/5.4/manual.html</a></noindex><p>Раздел 6.3 – Modules</p> <br />
			<i>15.01.2021 10:05:57, Egor Zaytsev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51775/topic6131/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51775/topic6131/</guid>
			<pubDate>Fri, 15 Jan 2021 10:05:57 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как понять, что скрипт загружен через require?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51761/topic6131/">Как понять, что скрипт загружен через require?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			В Lua 5.1 можно было заглянуть в package.loaded[modname].<br />Если там userdata, то скрипт загружен через require, иначе - запущен сам.<br />А теперь как? <br />
			<i>14.01.2021 13:37:38, Незнайка.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51761/topic6131/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51761/topic6131/</guid>
			<pubDate>Thu, 14 Jan 2021 13:37:38 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
