Создание переменной во время выполнения

 

Я знаю, что так можно сделать в языке программирования, но вот только в mql5 все по-другому...

Сейчас мне приходится создавать переменные demo_rows_1, demo_rows_2 и т.д. А хотелось бы, чтобы эту переменную я мог как бы генерировать в цикле: demo_rows_{i} или что-то в этом духе. Такое возможно?

Массив не подходит, потому что изначально переменная создается из ресурса еще до выполнения функций.

Существует ли такой способ создания переменной на лету?

 
Evgeniy Scherbina:

Я знаю, что так можно сделать в языке программирования, но вот только в mql5 все по-другому...

Сейчас мне приходится создавать переменные demo_rows_1, demo_rows_2 и т.д. А хотелось бы, чтобы эту переменную я мог как бы генерировать в цикле: demo_rows_{i} или что-то в этом духе. Такое возможно?

Массив не подходит, потому что изначально переменная создается из ресурса еще до выполнения функций.

Существует ли такой способ создания переменной на лету?

Динамический массив не пробовали?

 
Vitalii Ananev:

Динамический массив не пробовали?

С массивами все понятно. И тогда мне придется получить доступ вручную к каждой переменной demo_rows_1, demo_rows_2 и т.д. чтобы сначала зарядить массив. Можно ли обойти заряжение массива путем генерации нужного имени переменной на лету?

Вот пример из php, где через знак доллара $ можно объявить переменную:

$value = "demo_rows_1";

${$value} = 0.123;

В итоге получаем на лету:

$demo_rows_1 = 0.123;
 
Evgeniy Scherbina:

С массивами все понятно. И тогда мне придется получить доступ вручную к каждой переменной demo_rows_1, demo_rows_2 и т.д. чтобы сначала зарядить массив. Можно ли обойти заряжение массива путем генерации нужного имени переменной на лету?

Вот пример из php, где через знак доллара $ можно объявить переменную:


В итоге получаем на лету:

Вот то же самое:

double demo_rows[];

...
int nTotal = ArraySize(demo_rows);

if (ArrayResize(demo_rows, nTotal + 1) != nTotal + 1)
{
   // ошибка изменения размера массива
   return
}

demo_rows[nTotal] = 0.123;

...
nTotal = ArraySize(demo_rows);
for (int i = 0; i < nTotal; ++i)
   Print(demo_rows[i]);
 
Evgeniy Scherbina:

С массивами все понятно. И тогда мне придется получить доступ вручную к каждой переменной demo_rows_1, demo_rows_2 и т.д. чтобы сначала зарядить массив. Можно ли обойти заряжение массива путем генерации нужного имени переменной на лету?

Вот пример из php, где через знак доллара $ можно объявить переменную:


В итоге получаем на лету:

Что вам мешает создать динамический массив demo_rows[]. Далее когда вам нужно увеличиваете его размер на 1. И "заряжайте" свой массив в цикле не городя лишних сущностей в виде переменных Обращение к данным в массиве по индексу. Пример из PHP тут вообще не катит. PHP интерпретатор, mql компилятор можно сказать специализированный C++. 

 
Vitalii Ananev:

Что вам мешает создать динамический массив demo_rows[]. Далее когда вам нужно увеличиваете его размер на 1. И "заряжайте" свой массив в цикле не городя лишних сущностей в виде переменных Обращение к данным в массиве по индексу. Пример из PHP тут вообще не катит. PHP интерпретатор, mql компилятор можно сказать специализированный C++. 

Вот то то и оно что не катит. Я же говорю переменные demo_rows_1, demo_rows_2 и т.д. объявляются как переменные ресурса в самом начале до всех функций. И по-другому объявить эти переменные ресурса нельзя. Или можно?

Ладно, я понял что нельзя

 
Evgeniy Scherbina:

Вот то то и оно что не катит. Я же говорю переменные demo_rows_1, demo_rows_2 и т.д. объявляются как переменные ресурса в самом начале до всех функций. И по-другому объявить эти переменные ресурса нельзя. Или можно?

Ладно, я понял что нельзя

А разве в качестве "переменной ресурса" массив объявить нельзя?

 
Evgeniy Scherbina:

Вот то то и оно что не катит. Я же говорю переменные demo_rows_1, demo_rows_2 и т.д. объявляются как переменные ресурса в самом начале до всех функций. И по-другому объявить эти переменные ресурса нельзя. Или можно?

Ладно, я понял что нельзя

Три раза перечитал тему, так и не понял, что нужно.

Вроде правильно сказали - динамический массив.

Кроме того - создание переменных в цикле, чего бы их не создавать-то ?  Что там "нельзя" ?

И, кстати, про удаление не забыл ?

 
Evgeniy Scherbina:

Существует ли такой способ создания переменной на лету?

или списки или динамические массивы или вот делал шаблон все, что хотите оборачиваете в класс с наследованием от CObject и добавляете свои методы, или не добавляете, но в любом случае доступ будет как к массиву через [] и есть методы AddValue() и Delete()

https://www.mql5.com/ru/forum/85652/page16#comment_12346740

https://www.mql5.com/ru/forum/85652/page17#comment_12370424

 
Georgiy Merts:

Кроме того - создание переменных в цикле, чего бы их не создавать-то ?  Что там "нельзя" ?

Пример?

 

Я понял так: 

Человеку нужно в любой момент создать переменную... Но объявить переменную в любом месте не проблема. Значит он хочет создать переменную с именем, которое генерируется автоматически.

Из моего опыта. На PHP это было возможно и не сложно. На С++ ... не помню, но вроде, с такой задачей не сталкивался. На MQL - без бубна не получится, но!, если очень захотеть, то можно ))))))

Причина обращения: