<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[QUIK -> DDE &mdash; Возвращаемые значения CreateDataSource по ссылке]]></title>
	<link rel="self" href="https://quik2dde.ru/extern.php?action=feed&amp;tid=395&amp;type=atom" />
	<updated>2022-09-30T09:03:14Z</updated>
	<generator>PunBB</generator>
	<id>https://quik2dde.ru/viewtopic.php?id=395</id>
		<entry>
			<title type="html"><![CDATA[Re: Возвращаемые значения CreateDataSource по ссылке]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3692#p3692" />
			<content type="html"><![CDATA[<p>Спасибо!</p>]]></content>
			<author>
				<name><![CDATA[Serg_]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3371</uri>
			</author>
			<updated>2022-09-30T09:03:14Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3692#p3692</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Возвращаемые значения CreateDataSource по ссылке]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3687#p3687" />
			<content type="html"><![CDATA[<p>Возвращайте таблицу как результат функции - и все будет отлично. Зачем что-то выдумывать?<br />Ну либо можно копировать из таблицы в таблицу, не переписывая полностью само значение аргумента функции, но зачем? это ресурсозатратно наверняка выйдет.</p><p>Передачи параметров функций &quot;по ссылке&quot; в общем смысле этого понимания - в Lua нет.</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2022-09-30T07:13:45Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3687#p3687</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Возвращаемые значения CreateDataSource по ссылке]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3686#p3686" />
			<content type="html"><![CDATA[<p>Спасибо, я предполагал, что скорее всего так и есть, но вопрос в том, что получается - получить возвращённый результат именно в таблицу переданную по ссылке - не получится ?<br />То есть возвращенный результат всегда будет создавать свою таблицу ?<br />То есть только через дополнительное поэлементное копирование занести данные в мою таблицу ?</p>]]></content>
			<author>
				<name><![CDATA[Serg_]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3371</uri>
			</author>
			<updated>2022-09-30T06:58:42Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3686#p3686</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Возвращаемые значения CreateDataSource по ссылке]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3682#p3682" />
			<content type="html"><![CDATA[<p>Вы смешали 2 понятия:<br />- передача таблицы в функцию по ссылке (да, это так)<br />- замена локального значения аргумента внутри функции новым значением</p><p>Когда вы внутрь my_CreateDataSource__HISTORY__wrapper() передали таблицу my_table_data_history_candle - то она передалась именно по ссылке. Это легко проверить, если в начале функции my_CreateDataSource__HISTORY__wrapper() <em>добавить</em> в аргумент функции my_table_data_history_candle_ элементы, по возвращении из функции добавленные элементы в таблице будут.</p><p>Но, как только вы сделали <br /></p><div class="codebox"><pre><code>local my_table_data_history_candle_, error_desc = CreateDataSource(&quot;TQBR&quot;, &quot;SBER&quot;, INTERVAL_D1)</code></pre></div><p>то в my_table_data_history_candle_ у вас уже совершенно <strong>другая</strong> таблица. Вы присвоили параметру функции полностью новое значение и теперь уже my_table_data_history_candle_ не содержит ссылки на переданую в него таблицу.<br />Можно было вообще написать<br /></p><div class="codebox"><pre><code>my_table_data_history_candle_ = 5</code></pre></div><p>и тогда значение my_table_data_history_candle_ было бы целого типа и равно 5, но это вовсе не означало бы, что и &quot;наружняя&quot; таблица перестала бы существовать.</p><p>Для понимания поиграйтесь вот здесь<br />[url]https://qlua.ru/demo/[/url]<br />вот с таким кодом:<br /></p><div class="codebox"><pre><code>function get_table()
  return {&#039;A&#039;,&#039;B&#039;}
end

function print_table(t_)
  for _,v in pairs(t_) do
    print(v)
  end
end

function f(t)
  t.x = &#039;X&#039;
  print(&#039;Внутри f() - начало:&#039;)
  print_table(t)

  t = get_table()
  t.Z = &#039;Z&#039;

  print(&#039;Внутри f() - выход:&#039;)
  print_table(t)
end

local my_tbl = {&#039;M&#039;, &#039;N&#039;}
f(my_tbl)

print(&#039;Итог глобальная таблица:&#039;)
print_table(my_tbl)</code></pre></div><p>В результате выполнения данного кода будет напечатано:<br /></p><div class="codebox"><pre><code>Внутри f() - начало:
M
N
X
Внутри f() - выход:
A
B
Z
Итог глобальная таблица:
M
N
X    &lt;-- обратите внимание, X, добавленный внутри функции, остался в результатах, так что ссылка, все как и написано в документации</code></pre></div><p>Можно поиграться с кодом, попереставлять в нем строчки, помедитировать над результатами <img src="https://quik2dde.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /> (я так и сделал, с ходу сам не понял где подвох)</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2022-09-30T06:34:00Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3682#p3682</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Возвращаемые значения CreateDataSource по ссылке]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3680#p3680" />
			<content type="html"><![CDATA[<p>Подскажите пожалуйста, целый вечер мучаюсь, не могу понять в чем дело.</p><p>Вот такой простенький код:</p><div class="codebox"><pre><code>function my_CreateDataSource__HISTORY__wrapper(my_table_data_history_candle_)


local my_table_data_history_candle_, error_desc = CreateDataSource(&quot;TQBR&quot;, &quot;SBER&quot;, INTERVAL_D1)  --Вызываем собсвенно CreateDataSource


--message(tostring(my_table_data_history_candle_:Size()))    --размер 3008, то есть не нулевой 

return 1

end


----------------------------------------------int main:--------------------------------------------

function main()

local my_table_data_history_candle={} 

local my_status = my_CreateDataSource__HISTORY__wrapper(my_table_data_history_candle)

message(tostring(my_table_data_history_candle:Size()))

end</code></pre></div><p>-Таблицы в Lua передается по ссылке<br />-После завершения функции CreateDataSource - в таблице &quot;my_table_data_history_candle_&quot; - есть данные.<br />-Но, когда завершается функция my_CreateDataSource__HISTORY__wrapper - и я пытаюсь вывести размер - ничего не происходит, как будто бы - таблица, которую заполнила функция CreateDataSource - это не та таблица, которая была предана по ссылке.</p><p>То есть квик выдает ошибку: &quot; attempt to call a nil value (method &#039;Size&#039;)&quot; - то есть таблица пустая.</p><p>Не понимаю почему ??</p>]]></content>
			<author>
				<name><![CDATA[Serg_]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3371</uri>
			</author>
			<updated>2022-09-29T18:11:02Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3680#p3680</id>
		</entry>
</feed>
