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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Evgeniy Scherbina
24037
Evgeniy Scherbina  

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

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

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

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

Vitalii Ananev
10521
Vitalii Ananev  
Evgeniy Scherbina:

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

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

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

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

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

Evgeniy Scherbina
24037
Evgeniy Scherbina  
Vitalii Ananev:

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

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

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

$value = "demo_rows_1";

${$value} = 0.123;

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

$demo_rows_1 = 0.123;
Ihor Herasko
21050
Ihor Herasko  
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]);
Vitalii Ananev
10521
Vitalii Ananev  
Evgeniy Scherbina:

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

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


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

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

Evgeniy Scherbina
24037
Evgeniy Scherbina  
Vitalii Ananev:

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

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

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

Vitalii Ananev
10521
Vitalii Ananev  
Evgeniy Scherbina:

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

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

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

Georgiy Merts
9179
Georgiy Merts  
Evgeniy Scherbina:

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

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

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

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

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

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

Igor Makanu
9498
Igor Makanu  
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

Evgeniy Scherbina
24037
Evgeniy Scherbina  
Georgiy Merts:

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

Пример?

Сергей Таболин
2641
Сергей Таболин  

Я понял так: 

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

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

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий