<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: метатаблица для OnInit]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме метатаблица для OnInit форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Thu, 23 Apr 2026 09:40:16 +0300</pubDate>
		<item>
			<title>метатаблица для OnInit</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message26774/topic3073/">метатаблица для OnInit</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Хотелел именно так. Вся работа будет внутри dll. Скрипт делает только require.<br />Я переделал на передачу адреса объекта через lightuserdata, ничем не хуже только память чистить самому. <br /><br />Дописав немного функционал убедился что созданный таким образом колбек(через userdata+metatable) также не вызывается будучи переданным в функцию SearchItems. <br />Ну и похоже везде эта проверка на то что в переменной функция.<br /><br />Раз это не работает только для колбеков qlua, то просьба поправить qlua чтобы была такая возможность. (вызов пользовательский колбеков qlua как метатаблиц с __call) <br />
			<i>20.09.2017 16:53:42, Антон.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message26774/topic3073/</link>
			<guid>http://forum.quik.ru/messages/forum10/message26774/topic3073/</guid>
			<pubDate>Wed, 20 Sep 2017 16:53:42 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>метатаблица для OnInit</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message26763/topic3073/">метатаблица для OnInit</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			В QLua, как и в обычном Lua все эти &quot;изыски&quot; прекрасно работают. Единственное, с чем эти номера не проходят, это с колбеками QLua. Причину я уже назвал выше: Quik перед вызовом проверяет, что в переменной (с зарезервированным именем колбека) содержится ссылка именно на функцию (видимо как-то так, переводя этот код на Lua: If OnTrade and type(OnTrade) == &quot;function&quot; then OnTrade(trade) end).<br />Вы же пытаетесь в зарезервированное имя колбека записать ссылку на таблицу или пользовательские данные (получится type(OnInit) == &quot;table&quot; или type(OnInit) == &quot;userdata&quot; и т.п.).<br />Что Вам мешает сделать так:<br />function OnInit()<br /> &nbsp;MyOnInit()<br />end<br />MyOnInit = {}<br />ну и далее все, что Вы хотели сделать с OnInit делайте с MyOnInit. <br />
			<i>20.09.2017 13:02:16, Алексей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message26763/topic3073/</link>
			<guid>http://forum.quik.ru/messages/forum10/message26763/topic3073/</guid>
			<pubDate>Wed, 20 Sep 2017 13:02:16 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>метатаблица для OnInit</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message26755/topic3073/">метатаблица для OnInit</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_JsDHBCpS" href="/user/3010/" bx-tooltip-user-id="3010">Алексей</a> написал:<br />Quik, скорее всего, перед вызовом пользовательских колбеков проверяет, чтобы в переменной (с зарезервированным именем колбека) хранилась ссылка именно на функцию.<br />В вашей реализации получается, что в переменной с зарезервированном именем OnInit хранится ссылка на таблицу. Вот Quik ее и не вызывает.<br />Что Вам мешает сделать просто OnI nit = a?<br />=============<br />Пример только для проверки метатаблиц. Написал чтоб упростить вопрос.<br /><br />Берем любую c-функцию(любая сигнатура). Создаем объект-обертку для нее на userdata. <br />К userdata добавляем метатаблицу с __call чтоб луа мог вызывать функцию(обычную int(lua_state*) в которой идет вызов обертки и далее уже нормальной функции.<br />Ну и __gc для ручного вызова деструктора у объекта-обертки.<br />Есть и другие варианты, через lightuserdata например. но тогда приходится в dll придется хранить список с указателями на эти обертки и чистить при выгрузке. <br /><br />Вопщем я думал вариант с userdata и метатаблицами вполне стандартная возможность lua и странно что в qlua для колбеков это делать нельзя.<br />Я не так давно разбираюсь с этим языком, возможно я тут вообще не прав и нельзя какие то базовые функции так переопределять.(поправте если кто вкурсе, s_mike например говорит что это именно в qlua так)<br /><br />Временно сделал конешно по другому но хотелось бы прояснить, это моя недоработка или в qlua. <br />
			<i>20.09.2017 05:03:33, Антон.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message26755/topic3073/</link>
			<guid>http://forum.quik.ru/messages/forum10/message26755/topic3073/</guid>
			<pubDate>Wed, 20 Sep 2017 05:03:33 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>метатаблица для OnInit</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message26750/topic3073/">метатаблица для OnInit</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Quik, скорее всего, перед вызовом пользовательских колбеков проверяет, чтобы в переменной (с зарезервированным именем колбека) хранилась ссылка именно на функцию.<br />В вашей реализации получается, что в переменной с зарезервированном именем OnInit хранится ссылка на таблицу. Вот Quik ее и не вызывает.<br />Что Вам мешает сделать просто OnI nit = a? <br />
			<i>19.09.2017 21:34:11, Алексей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message26750/topic3073/</link>
			<guid>http://forum.quik.ru/messages/forum10/message26750/topic3073/</guid>
			<pubDate>Tue, 19 Sep 2017 21:34:11 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>метатаблица для OnInit</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message26739/topic3073/">метатаблица для OnInit</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_qKFm848Q" href="/user/1406/" bx-tooltip-user-id="1406">Антон</a> написал:<br />
====code====
<pre>&nbsp;&nbsp; function&nbsp;&nbsp;a(s)
&nbsp;&nbsp;&nbsp;&nbsp; message (s)
 end 

Oni nit&nbsp;&nbsp;=&nbsp;&nbsp;{}
mt&nbsp;&nbsp;=&nbsp;&nbsp;{ __call&nbsp;&nbsp;=&nbsp;&nbsp;a}
setmetatable(OnInit, mt)

 --OnInit("a")&nbsp;&nbsp;&nbsp;&nbsp;</pre>
=============
Хотел на колбеки (например возмем OnInit) повесить метатаблицy и обнаружил что квик не хочет их вызывать.<br />Код выше в теории должен при старте скрипта вызвать a(). но он просто завершается<br />Но если принудительно вызвать OnInit(&quot;a&quot;) все работает. В чем подвох?<br />=============<br />в реализации qlua. Таково ее природное свойство. <br />
			<i>19.09.2017 13:30:57, s_mike@rambler.ru.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message26739/topic3073/</link>
			<guid>http://forum.quik.ru/messages/forum10/message26739/topic3073/</guid>
			<pubDate>Tue, 19 Sep 2017 13:30:57 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>метатаблица для OnInit</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message26737/topic3073/">метатаблица для OnInit</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			====code====
<pre>function a(s)
&nbsp;&nbsp;&nbsp;&nbsp;message(s)
end

Oni nit = {}
mt = { __call = a}
setmetatable(OnInit, mt)

--OnInit("a") </pre>
=============
Хотел на колбеки (например возмем OnInit) повесить метатаблицy и обнаружил что квик не хочет их вызывать.<br />Код выше в теории должен при старте скрипта вызвать a(). но он просто завершается<br />Но если принудительно вызвать OnInit(&quot;a&quot;) все работает. В чем подвох? <br />
			<i>19.09.2017 13:21:55, Антон.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message26737/topic3073/</link>
			<guid>http://forum.quik.ru/messages/forum10/message26737/topic3073/</guid>
			<pubDate>Tue, 19 Sep 2017 13:21:55 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
