Errores, fallos, preguntas - página 240

 

Soy consciente de la evaluación truncada de la condición. Espero que esto responda a parte de la pregunta. Y se harán las comprobaciones necesarias. En la segunda opción, si se intercambian s1.process y s2.process, el flujo de trabajo es correcto. La pregunta no era sobre esto. Preguntaba por el resultado global. El resultado lógico global no depende de la evaluación abreviada de la condición. La pregunta era sobre el comportamiento de la variable local como variable estática para objetos de una clase. Como sabemos, los objetos de una clase sobrescriben una variable estática.

El mío: "En teoría, el código debería funcionar exactamente igual. Pero... Las variantes funcionan de forma diferente". debe entenderse como "el valor de retorno debería ser idéntico, pero son diferentes".

Ais:

Parece una recursión oculta, con el conjunto habitual de efectos secundarios, o ...


Sí, parece una recursión. Pero, los mismos métodos de diferentes objetos se llaman anidados. El mismo está excluido. Haciendo la salida al archivo descubrí que d1 deja el valor definido para d1 nivel inferior al volver al nivel superior.

 
Vigor:

Soy muy consciente de la evaluación abreviada de la condición. Espero que esto responda a parte de la pregunta. En la segunda variante, si intercambiamos s1.process y s2.process, funciona correctamente. La pregunta no era sobre esto. La pregunta era sobre el resultado global. El resultado lógico general no depende de la evaluación de la condición acortada. La pregunta era sobre el comportamiento de la variable local como variable estática para objetos de una clase. Como sabemos una variable estática es sobrescrita por objetos de la misma clase.

Sí, parece una recursión. Pero, los mismos métodos de diferentes objetos se llaman anidados. Se llaman los mismos métodos del mismo objeto. Habiendo hecho la salida al archivo descubrí que d1 deja el valor definido para d1 nivel inferior al volver al nivel superior.

Muestra un ejemplo para ilustrar el problema. Lo que has dado no muestra "corrupción de variables locales" de ninguna manera. Un código de trabajo que podríamos ejecutar por nuestra cuenta

 

¿Por qué hay que hacer todo por los desarrolladores de productos? ¿Falta de confianza en las cualificaciones de los desarrolladores de terceros? Me ha parecido que, según mis explicaciones detalladas, basta con comprobar una vez más lo que ocurre con las variables locales de los métodos de una clase cuando se anidan.

Bien, si tengo algo de tiempo libre escribiré un ejemplo especial.

 
Vigor:

¿Por qué hay que hacer todo por los desarrolladores de productos? ¿Falta de confianza en las cualificaciones de los desarrolladores de terceros? Me ha parecido que, según mis explicaciones detalladas, basta con comprobar una vez más lo que ocurre con las variables locales de los métodos de una clase cuando se anidan.

Bien, si tengo algo de tiempo libre escribiré un ejemplo especial.

¿Es reproducible bajo un depurador?
 
Vigor:

¿Por qué hay que hacer todo por los desarrolladores de productos? ¿Falta de confianza en las cualificaciones de los desarrolladores de terceros? Me ha parecido que, según mis explicaciones detalladas, basta con comprobar una vez más lo que ocurre con las variables locales de los métodos de una misma clase cuando se anidan.

Bien, si tengo algo de tiempo libre escribiré un ejemplo especial.

No hay manera de reproducir el problema anterior.
 

¿Cómo puedo obtener los precios actuales de diferentes pares de divisas en multidivisa? Al probarlo, SymbolInfoTick() sólo devuelve los precios del instrumento actual y genera el error 4302 al intentar acceder a otros pares.

 
-Alexey-:

¿Es correcto que por el código del indicador,

cuando se añade o se recompila en el gráfico, la unidad se imprime 2 veces? ¿Se cumple la condición dos veces en este caso? Por favor, explique, necesito que se ejecute una vez.

¿No sería más fácil poner la parte que se ejecuta una vez en el bloque de inicialización?

¿O es necesario tener una ejecución en la calculadora del indicador?

 
stringo:
No hay manera de reproducir el problema anterior.
Ejemplo con comentarios
Archivos adjuntos:
overtest.mq5  2 kb
 
mql5:
¿Se reproduce bajo el depurador?
Pero bajo el depurador está bien.
 
Interesting:

¿No sería más fácil poner la parte que se ejecuta una vez en el bloque de inicialización?

¿O tiene que ejecutarse una vez en la calculadora de indicadores?

Lo he encontrado. En un gráfico, la ventana minimizada de la segunda copia del indicador estaba - por eso se imprimía la segunda vez. Lo siento, todo funciona correctamente. Yo no lo he notado :) He borrado mis mensajes anteriores.