Errores, fallos, preguntas - página 714

 
victorg:

Una macro y una función en línea son efectivamente cosas diferentes. Pero no me refiero a eso. Este es un ejemplo en el que los valores de los argumentos son desconocidos en tiempo de compilación

En el primer caso, hay que pegar el código en la función actual (supongo) y en el segundo caso, se llama a la función con parámetros pasados por la pila (supongo). Pero a efectos de optimización, el compilador puede implementar también la segunda variante mediante sustitución. ¿Es así? No lo sé. Por eso he preguntado.

Son los Metakvots los que tienen que ser torturados. Pero mi opinión coincide con la tuya (por la optimización, el resultado podría ser diferente).
 

El objeto elipse sólo se resalta con el ratón si se hace clic en los puntos de anclaje.

¿Es un error o una característica? Su aplicación es muy inconveniente.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов - Документация по MQL5
 
La escala vertical, si se ajusta manualmente, no se recuerda al reiniciar. También una molestia.
 
MetaDriver:

Это что, юмор такой чёрный?

1.  Извини, - бред.  Я понимаю, тут паранойя в моде, и является ломовым аргументом за "почему так не надо делать".  Никакой опасности не вижу в упор. Смотрел внимательно, если чё.  Любое имя, в конечном счёте есть ссылка.  Индексация есть обычное расширение понятия имени. Не более.  Давай запретим присваивание вообще.  В целях безопасности.  Ссылки же крайне опасны так?

2.  Духу объектно-ориентированного программирования, при такой логике, яростно противоречат С++, С#, Делфи, пара дюжин менее популярных языков, в которых индексаторы совершенно нормально работают и справа и слева.  Причём здравому смыслу и моему духу это почему-то не противоречит.

Индексаторы делаются для связи с внешней средой.  Их функция именно интерфейсная.  Я могу инкапсулировать и прятать что угодно, но индексы мне нужны для оперирования объектами как массивами. Фактически все массивы как-то устроены. Например обычные динамические массивы mql. Может запретим их слева от оператора присваивания ставить?  Заменим функцией какой-нибудь типа SetArrayValue(array, i, j, value);  Заодно и в читабельности выиграем. Да и отладка станет куда проще.  Мля. Уф..

3.  А как насчёт того, чтоб сделать нормальный индексатор?  Горничная это конечно классно, но королева всё-таки лучше.

4.  Вот в этом месте у меня крыша конкретно начала ехать.  Это что, нечитабельно??

Вот это читабельнее, да?

  t.setDataElement(i, i*i);

Круто.  Пожалуй пойду лечиться.

5.  Ваще круто.

6. Я плакаль.


e(array, i, j, value); Esto también mejorará la legibilidad. Y la depuración también será mucho más fácil. Mierda. Ugh...

Bueno, un colocador tiene la ventaja de que puede hacer algo más que una simple ecuación.

Por ejemplo, puede registrar información, convertir datos (si hablamos de cadenas o datos más complejos), enviar mensajes a otros objetos si ocurre algo importante (como actualizar datos).

¿Cómo sabrá su objeto que la fecha ha cambiado? Al parecer, va a almacenar citas...
Ah, sí, es un falso problema, porque su objeto es más bien una estructura y no gestiona realmente nada.
Todo se hace en otra clase basura, que maneja todo o peor aún, todo pasa en onStart(), onTick(), ... ¡! :)

Que tenga un buen día

 
MetaDriver:

3. ¿qué tal hacer un indexador normal? maid es genial, pero queen es mejor.

Junta Muti. Sin embargo, comparado con un lvalor normal, será mucho más caro en términos de tiempo. Pero tendrá el aspecto que usted necesita.

______

Ah, diablos, no. Entonces se necesita una sobrecarga del operador de tipo fantasma. Lástima.

 
speedy:

Bueno, la ventaja del fijador es que puedes hacer algo más que una simple ecuación.

Por ejemplo, puede registrar información, convertir datos (si hablamos de cadenas o datos más complejos), enviar mensajes a otros objetos si ocurre algo importante (como actualizar datos).

¿Cómo sabrá su objeto que la fecha ha cambiado? Al parecer, va a almacenar citas...
Oh sí, es un falso problema, porque su objeto es más bien struct y no controla realmente nada.
Todo se hace en otra clase basura, que maneja todo o peor aún, todo pasa en onStart(), onTick(), ... ¡! :)

Que tenga un buen día

La cuestión es que el indexador es lo mismo que el establecedor en términos de características . Se implementa exactamente igual que una función, cuyo contenido puede ser cualquier cosa (el caso típico más sencillo es la comprobación de los límites del array y el manejo de otros errores), y no sólo devuelve una referencia a un elemento del array.

Que tengas un buen día también.

(Perdón por el tono de ayer, estaba un poco al límite, problemas en el trabajo. No tienes nada que ver con eso. Bueno, a menos que estés siendo demasiado categórico :)

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 
TheXpert:

Junta Muti. Sin embargo, comparado con un lvalor normal, será mucho más caro en términos de tiempo. Pero tendrá el aspecto que usted necesita.

______

Ah, diablos, no. En ese caso, hay que sobrecargar el operador de conversión de tipos. Qué pena.

En realidad, creo que lo harán. Hay un fallo obvio con las devoluciones de referencia en el lenguaje.

No hay que hacer variables de referencia, pero el retorno de valores l de las funciones es sagrado... :)

No creo que no se pueda resolver en principio - el lenguaje tiene mql-arrays habituales y se sienten muy bien a ambos lados del operador de asignación. ¡Pero son clases C++ por implementación !

Aquí hay otro ejemplo de la misma serie. Este código compila pero no funciona.

#define _MyContainer(name,type,size)  struct name { public: type array[size]; type At(int i) {return array[i];} }
#define  ASize 8
#define  BSize 4

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   _MyContainer(MyClass, int, ASize);
   MyClass MyVar;
   Print(sizeof(MyVar)); 
   for(int i=0;i<ASize;i++)
     {
      MyVar.array[i]=i*i;
     }
   for(int i=0;i<ASize;i++)
     {
      Print(MyVar.At(i));
     }
   _MyContainer(My2DBag, MyClass, BSize);
   My2DBag MyVar2D;
   for(int i=0;i<BSize;i++)
     {
      for(int j=0;j<ASize;j++) MyVar2D.array[i].array[j]=(i+1)*(j+1);
     }
   for(int i=0;i<BSize;i++)
     {
      for(int j=0;j<ASize;j++) Print(MyVar2D.At(i).At(j));
// Run-time ERROR:  DefTest (USDJPY,M30)  invalid pointer access in 'DefTest.mq5' (38,46)

//      for(int j=0;j<ASize;j++) Print(MyVar2D.array[i].At(j));
     }
  }

Mi punto no es que no deban compilar, mi punto es que deben funcionar. :)

 
MetaDriver:

...
No digo que no deba compilar, digo que debe funcionar... :)

Sí, tienes razón, es un error del compilador, lo arreglaremos.
 

MQL5 tiene una maravillosa constante IS_DEBUG_MODE que pertenece al grupo de otras constantes. ¿Podemos añadir dicha constante para un probador? Algo como IS_TESTER_MODE...

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы - Документация по MQL5
 
denkir:

MQL5 tiene una maravillosa constante IS_DEBUG_MODE que pertenece al grupo de otras constantes. ¿Podemos añadir dicha constante para un probador? Algo como IS_TESTER_MODE...

¿No funcionarán estas constantes?

ENUM_MQL5_INFO_INTEGER

Identificador

Descripción

Tipo de propiedad

MQL5_PROGRAM_TYPE

Tipo de programa mql5

ENUM_PROGRAM_TYPE

MQL5_DLLS_ALLOWED

Permiso para utilizar la DLL para elprograma actual que se está ejecutando

bool

MQL5_TRADE_ALLOWED

Permisopara comerciar con este programa en marcha

bool

MQL5_DEBUGGING

Señal de que un programa en ejecución funciona en modo de depuración

bool

MQL5_TESTING

Signo de ejecución de un programa en el probador

bool

MQL5_OPTIMIZACIÓN

Señal de ejecución de un programa durante la optimización

bool

MQL5_VISUAL_MODE

Signo de ejecución de un programa en modo de prueba visual

bool