<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: OnOrder выдает ошибку]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме OnOrder выдает ошибку форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Sun, 12 Apr 2026 09:01:45 +0300</pubDate>
		<item>
			<title>OnOrder выдает ошибку</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message12294/topic1347/">OnOrder выдает ошибку</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Уважаемый,<br />====quote====<br />Все что я написал - есть правда. <br />=============<br />Всё, что вы написали, есть <B>ваша </B>правда. Попрошу вас в дальнейшем быть более точным в высказываниях.<br />====quote====<br />Ошибка в том, что переменная order не содержит элемента order_num Поэтому вызов функции onOrder с параметрами или без не спасает от этой ошибки.<br />=============<br />Вызов 
====code====
<pre>OnOrder({})</pre>
=============
 будет вполне нормальным, как и такой код
====code====
<pre>t = {};
message(tostring(t.order_num));
</pre>
=============
так как индексация в Lua доступна всегда для таблиц и часто для типа userdata. В остальных случаях вы получите похожую ошибку с указанием типа. Однако, если для типа указана метатаблица, то возможно и его индексирование. Пример:
====code====
<pre>a = ("test").sub;
message(tostring(a));</pre>
=============
Замечу, что указание метатаблицы для типов кроме table и userdata возможно только из Си кода с помощью метода <noindex><a href="http://pgl.yoyo.org/luai/i/lua_setmetatable" target="_blank" rel="nofollow">lua_setmetatable</a></noindex> и никак из Lua.<br /><br /><br />====quote====<br />относительно объявления глобальных переменных в любом месте неверно. вот пример: print(x) x=10 результат nil<br />=============<br />В таком примере вы правильно показали, что использование переменной в качестве аргумента функции перед присваиванием ей значения, приводит к ожидаемому результату - она имеет внутри функции значение nil. Но это ли я имел ввиду? Когда по вашему будут использоваться объявления функций?<br />Возьмём такой код.
====code====
<pre>function main()
&nbsp;&nbsp;&nbsp;&nbsp;test1();
end

function test1()
&nbsp;&nbsp;&nbsp;&nbsp;test2();
end

function test2()
&nbsp;&nbsp;&nbsp;&nbsp;message("Test message");
end

</pre>
=============
Здесь, например, функция test2 используется перед её объявлением. Однако такой код работает, и происходит это потому, что функция main вызывается (из Си кода терминала Quik) после интерпретации всего Lua-файла.<br /><br />Даже такой код будет работать с тем же эффектом:
====code====
<pre>function main()
&nbsp;&nbsp;&nbsp;&nbsp;test2 = function()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message("Test message");
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;test1();
end

function test1()
&nbsp;&nbsp;&nbsp;&nbsp;test2();
end

</pre>
=============
<br />Для тех, кому интересно как работает Lua снаружи и изнутри, рекомендую книгу Roberto Ierusalimschy &quot;Programming in Lua&quot; (2013) <br />
			<i>08.02.2016 21:20:04, Вячеслав.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message12294/topic1347/</link>
			<guid>http://forum.quik.ru/messages/forum10/message12294/topic1347/</guid>
			<pubDate>Mon, 08 Feb 2016 21:20:04 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>OnOrder выдает ошибку</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message12293/topic1347/">OnOrder выдает ошибку</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			относительно объявления глобальных переменных в любом месте неверно.<br />вот пример:<br />print(x)<br />x=10<br />результат <B>nil</B> <br />
			<i>08.02.2016 19:57:44, Николай  Камынин.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message12293/topic1347/</link>
			<guid>http://forum.quik.ru/messages/forum10/message12293/topic1347/</guid>
			<pubDate>Mon, 08 Feb 2016 19:57:44 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>OnOrder выдает ошибку</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message12292/topic1347/">OnOrder выдает ошибку</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<noindex><a href="https://forum.quik.ru/user/1604/" target="_blank" rel="nofollow">Вячеслав</a></noindex>,<br />Все что я написал - есть правда.<br />Но причину ошибки я указал неверно.<br /><B>Вы тоже неверно указали причину ошибки.</B><br />-------------------<br />Ошибка в том, что переменная order не содержит элемента order_num<br />Поэтому вызов функции onOrder с параметрами или без не спасает от этой ошибки. <br />
			<i>08.02.2016 19:45:01, Николай  Камынин.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message12292/topic1347/</link>
			<guid>http://forum.quik.ru/messages/forum10/message12292/topic1347/</guid>
			<pubDate>Mon, 08 Feb 2016 19:45:01 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>OnOrder выдает ошибку</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message12248/topic1347/">OnOrder выдает ошибку</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<noindex><a href="https://forum.quik.ru/user/1585/" target="_blank" rel="nofollow">yves1</a></noindex>,<br />Ошибка, которую вы получили<br /><br />====quote====<br />attempt to index local 'order' (a nil value) <br />=============<br />означает, что индексация через точку локальной переменной order (в вашем случае -- параметра функции) невожможна, потому что order имеет значение nil.<br />Происходит это потому, что вы вызываете OnOrder() из main без параметров. Lua никак не контролирует число параметров при вызове функций: если их меньше чем нужно, то недостающие примут значение nil (так, например, параметр order функции OnOrder принимает значение nil при вызове OnOrder() в вашем примере), если их больше чем нужно, то лишние параметры игнорируются. После такой ошибки происходит генерация исключения в lua и, выход из кода функции OnOrder, а затем и из main, т.к. код по перехвату исключений у вас отсутствует. После выхода из main (любого: с ошибкой или без) происходит выгрузка скрипта.<br /><br />Ваша ошибка заключается в том, что вы вызываете OnOrder без параметров из main. OnOrder вызывается терминалом при регистрации заявки. Вызывать её явно, обычно, не имеет смысла. Советую также обратить внимание на то, что код в main и код callback'ов OnOrder, OnTrade... выполняется параллельно. Этот факт обязательно нужно учитывать при передаче параметров через глобальные переменные из callback'ов в main и обратно.<br /><noindex><a href="https://forum.quik.ru/user/62/" target="_blank" rel="nofollow">Николай Камынин</a></noindex>,<br /><br />====quote====<br />А ошибку Вы получаете потому, что у Вас вызов функции происходит до ее описания Попробуйте изучить Lua.<br />=============<br />Пожалуйста, не надо вводить человека в заблуждение. Объявление глобальных функций в Lua возможно в любом порядке, т.к. после загрузки скрипта сначала производится его выполнение (выполняется весь код вне функций и объявление функций), и лишь затем терминалом вызывается main и остальные callback'и.<br />Как, например, OnOrder в примере кода выше. <br />
			<i>07.02.2016 12:23:43, Вячеслав.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message12248/topic1347/</link>
			<guid>http://forum.quik.ru/messages/forum10/message12248/topic1347/</guid>
			<pubDate>Sun, 07 Feb 2016 12:23:43 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>OnOrder выдает ошибку</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message12218/topic1347/">OnOrder выдает ошибку</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			А ошибку Вы получаете потому, что у Вас вызов функции происходит до ее описания<br />Попробуйте изучить Lua. <br />
			<i>06.02.2016 07:39:08, Николай  Камынин.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message12218/topic1347/</link>
			<guid>http://forum.quik.ru/messages/forum10/message12218/topic1347/</guid>
			<pubDate>Sat, 06 Feb 2016 07:39:08 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>OnOrder выдает ошибку</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message12217/topic1347/">OnOrder выдает ошибку</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Нельзя колбек вставлять в main <br />попробуйте разобраться с назначением колбеков и main.<br />Так НЕЛЬЗЯ:<br />function main() &nbsp; &nbsp; while is_run do &nbsp; <B> OnOrder() &nbsp; </B> sleep(50) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end end <br />
			<i>06.02.2016 07:37:34, Николай  Камынин.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message12217/topic1347/</link>
			<guid>http://forum.quik.ru/messages/forum10/message12217/topic1347/</guid>
			<pubDate>Sat, 06 Feb 2016 07:37:34 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>OnOrder выдает ошибку</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message12213/topic1347/">OnOrder выдает ошибку</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Я пока что просто тестирую функцию, что бы она хоть что-то выдавала. А в будущем хочу ее засунуть в скрипт. <br />
====code====
<pre>is_run=true

function main()

&nbsp;&nbsp;&nbsp;while is_run do
&nbsp;&nbsp;&nbsp;OnOrder()
&nbsp;&nbsp;&nbsp;sleep(50)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;end
end

function OnOrder(order)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message("Цена "..tostring(order.order_num));&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end
&nbsp;&nbsp; 
function OnStop(stop_flag) 
&nbsp;&nbsp;&nbsp;is_run=false
&nbsp;&nbsp;&nbsp;stop_flag=1
end</pre>
============= <br />
			<i>05.02.2016 23:15:18, yves1.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message12213/topic1347/</link>
			<guid>http://forum.quik.ru/messages/forum10/message12213/topic1347/</guid>
			<pubDate>Fri, 05 Feb 2016 23:15:18 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>OnOrder выдает ошибку</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message12210/topic1347/">OnOrder выдает ошибку</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Вы пишите скрипт или индикатор? <br />
			<i>05.02.2016 22:57:29, Николай  Камынин.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message12210/topic1347/</link>
			<guid>http://forum.quik.ru/messages/forum10/message12210/topic1347/</guid>
			<pubDate>Fri, 05 Feb 2016 22:57:29 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>OnOrder выдает ошибку</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message12209/topic1347/">OnOrder выдает ошибку</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый вечер, я вставляю в код следующую функцию:<br /><br />function OnOrder(order)<br /> &nbsp; message(&quot;Цена &quot;..tostring(order.price));-- NUMBER &nbsp; <br />end<br /><br />При компиляции выдается ошибка:<br /><br /> attempt to index local 'order' (a nil value)<br /><br />Что написано не так? Спасибо. &nbsp; <br />
			<i>05.02.2016 22:47:15, yves1.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message12209/topic1347/</link>
			<guid>http://forum.quik.ru/messages/forum10/message12209/topic1347/</guid>
			<pubDate>Fri, 05 Feb 2016 22:47:15 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
