<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: # и table.getn]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме # и table.getn форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Mon, 20 Apr 2026 21:47:27 +0300</pubDate>
		<item>
			<title># и table.getn</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63174/topic7318/"># и table.getn</a></b> <i># и table.getn - косячно</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_KvXcL58R" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, Стек-то LIFO, если брать только очерёдность обслуживания, но это не обязательно. Чистый стек, который однозначно LIFO у меня только стек прерываний. А стек сделок уже не стек в классическом понимании - там выбирается та сделка, которая сработала - и элемент с этой сделкой может располагаться где угодно. А на его место закидывается действительно последний на данный момент, чтобы дырок в массиве не было, а размер стека тоже уменьшается на единицу. Абсолютно та же техника и в стеке заявок, но там элементы вообще выбираются чуть ли не в порядке очереди. Но не совсем - некоторые элементы могут выбираться и вне очереди. А от стека во всех них то, что меняется всегда именно последний элемент - либо выбрасывается из стека, либо переносится в дырку. И что значит &quot;максимальный размер&quot;? ТЕКУЩИЙ размер! И он в большинстве случаев вообще нигде не хранится (для статических массивов), либо хранится в отдельной структуре данных, а нулевой элемент может использоваться и как обычный элемент массива, и для хранения метаданных о самом массиве. Например, нулевой элемент массива тикеров представляет собой сложное разветвлённое дерево на несколько десятков полей. Всё определяется удобством доступа к данным в каждом конкретном случае.<br /><br />Как мне много лет назад ответил один программист, когда я ему тоже заявил, что стек это просто LIFO: &quot;Просто LIFO - это магазин к АКМ&quot;. И он был прав! &nbsp;<img src="http://forum.quik.ru/upload/main/smiles/5/icon_smile.png" border="0" data-code=":smile:" data-definition="SD" alt=":smile:" style="width:16px;height:16px;" title="С улыбкой" class="bx-smile" /> &nbsp; <br />
			<i>04.05.2022 21:40:23, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63174/topic7318/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63174/topic7318/</guid>
			<pubDate>Wed, 04 May 2022 21:40:23 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title># и table.getn</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63171/topic7318/"># и table.getn</a></b> <i># и table.getn - косячно</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_ghx6Y6qW" href="/user/14299/" bx-tooltip-user-id="14299">Владимир</a> написал:<br /><noindex><a href="/user/3132/" target="_blank" rel="nofollow">Nikolay</a></noindex>, Это если их инициализировать прямо в коде. У меня большинство массивов начинаются с нуля, а за дырками (в тех массивах, где они возможны) и размерами массивов слежу сам. Например, в стеках (заявок, сделок, прерываний) длина массива (она же ID последнего элемента) хранится как раз в его нулевом элементе. Очень удобно и очень надёжно, и плевать, что там &quot;оператор #&quot; по этому поводу думает - им я вообще не пользуюсь. Не говоря уже про &quot;переопределенные метаметоды&quot;.<br />=============<br />почти как у меня, тоже в нулевом - максимальный размер таблиц сделок и стопов, но храню не стеком.а таблицей.<br />Стек - это кипа - &nbsp;LIFO. <br />В этом случае у Вас последний обрабатывается первым, а до первого очередь может никогда не дойти.<br />Должна быть либо очередь либо таблица. &nbsp; <br />
			<i>04.05.2022 19:08:49, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63171/topic7318/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63171/topic7318/</guid>
			<pubDate>Wed, 04 May 2022 19:08:49 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title># и table.getn</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63170/topic7318/"># и table.getn</a></b> <i># и table.getn - косячно</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Да, никто не мешает самому организовать счетчик при добавлении и удалении элемента. <br />
			<i>04.05.2022 17:11:55, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63170/topic7318/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63170/topic7318/</guid>
			<pubDate>Wed, 04 May 2022 17:11:55 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title># и table.getn</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63169/topic7318/"># и table.getn</a></b> <i># и table.getn - косячно</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_iexTV3Cu" href="/user/3132/" bx-tooltip-user-id="3132">Nikolay</a>, Это если их инициализировать прямо в коде. У меня большинство массивов начинаются с нуля, а за дырками (в тех массивах, где они возможны) и размерами массивов слежу сам. Например, в стеках (заявок, сделок, прерываний) длина массива (она же ID последнего элемента) хранится как раз в его нулевом элементе. Очень удобно и очень надёжно, и плевать, что там &quot;оператор #&quot; по этому поводу думает - им я вообще не пользуюсь. Не говоря уже про &quot;переопределенные метаметоды&quot;. <br />
			<i>04.05.2022 16:37:53, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63169/topic7318/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63169/topic7318/</guid>
			<pubDate>Wed, 04 May 2022 16:37:53 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title># и table.getn</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63166/topic7318/"># и table.getn</a></b> <i># и table.getn - косячно</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_0PtaumfY" href="/user/3132/" bx-tooltip-user-id="3132">Nikolay</a> написал:<br />В Lua массивы начинают свою нумерацию от 1. Если будет дырка, то оператор # не вернет корректно значение.<br /><br />Победить - создать метатаблицу, с переопределенным метаметодом &nbsp;__len<br />=============<br />Фигня, какая-то, по-моему, это, но спасибо, так лучше... :)<br />	
====code====
<pre>a={}
&nbsp;&nbsp;&nbsp;setmetatable(a,{__index={len=function(len) local incr=0 for _ in pairs(len) do incr=incr+1 end return incr end}})
&nbsp;&nbsp;&nbsp;a&#91;0&#93;={sellprice=1, bayprice=1}
&nbsp;&nbsp;&nbsp;a&#91;1&#93;={sellprice=1, bayprice=1}
&nbsp;&nbsp;&nbsp;a&#91;2&#93;={sellprice=1, bayprice=1}
&nbsp;&nbsp;&nbsp;message(""..#a.." "..a:len());</pre>
============= <br />
			<i>04.05.2022 13:02:40, just.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63166/topic7318/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63166/topic7318/</guid>
			<pubDate>Wed, 04 May 2022 13:02:40 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title># и table.getn</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63165/topic7318/"># и table.getn</a></b> <i># и table.getn - косячно</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			В Lua массивы начинают свою нумерацию от 1. Если будет дырка, то оператор # не вернет корректно значение.<br /><br />Победить - создать метатаблицу, с переопределенным метаметодом &nbsp;__len <br />
			<i>04.05.2022 12:46:36, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63165/topic7318/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63165/topic7318/</guid>
			<pubDate>Wed, 04 May 2022 12:46:36 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title># и table.getn</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63164/topic7318/"># и table.getn</a></b> <i># и table.getn - косячно</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			====code====
<pre>a={}
&nbsp;&nbsp;&nbsp;a&#91;0&#93;={sellprice=1, bayprice=1}
&nbsp;&nbsp;&nbsp;a&#91;-1&#93;={sellprice=1, bayprice=1}
&nbsp;&nbsp;&nbsp;a&#91;-2&#93;={sellprice=1, bayprice=1}
&nbsp;&nbsp;&nbsp;message(""..#a);</pre>
=============
сообщает 0<br />	
====code====
<pre>a={}
&nbsp;&nbsp;&nbsp;a&#91;0&#93;={sellprice=1, bayprice=1}
&nbsp;&nbsp;&nbsp;a&#91;1&#93;={sellprice=1, bayprice=1}
&nbsp;&nbsp;&nbsp;a&#91;2&#93;={sellprice=1, bayprice=1}
&nbsp;&nbsp;&nbsp;message(""..#a);</pre>
=============
сообщает 2, что, кстати, тоже недостоверно.<br /><br />Какой есть простой способ это победить? table.getn вообще не существует, видимо, выдает &quot;attempt to call a nil value (field &#39;getn&#39;)&quot; <br />
			<i>04.05.2022 12:34:32, just.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63164/topic7318/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63164/topic7318/</guid>
			<pubDate>Wed, 04 May 2022 12:34:32 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
