esta es la segunda opción
resulta que las variables apuntan a la misma ubicación de memoria después de la primera asignación
if(firsttime) { backup = StringVal;
Me gustaría saber de qué construcción es esto
aquí hay un ejemplo
extern string StringVal = "string"; string backup = ""; bool firsttime = true; int init() { Print("========================="); Print("StringVal=",StringVal," backup=",backup); if(StringVal != backup){ if(firsttime) { backup = StringVal; Print(" First Call ===> backup = StringVal"); } Print("StringVal=",StringVal,"< > backup=",backup); } firsttime = false; } int start() { }
si compilo como experto
entonces cuando cambio el StringVal, la copia de seguridad cambia inmediatamente
y la última Impresión no se llama
¿Dónde está el problema?
Bueno, cambias manualmente el StringVal y el init funciona inmediatamente, así es ...
está claro que init() funciona
El problema es que 2. la variable se actualiza independientemente de otras condiciones
no hay ninguna condición de actualización - ¡pero la actualización se produce!
Sí, está todo claro
El problema es que 2. la variable se fija independientemente de otras condiciones
SIEMPRE
PROBLEMA GRAVE
aquí hay un ejemplo similar
el valor de la primera variable se pasa a la segunda sólo una vez y el valor de la segunda variable no debe cambiar en la ejecución posterior del programa
pero cada vez que se modifica la primera variable, cambia el valor de la segunda, lo que no debería ser
extern string Value = "O"; string temp_=""; bool firsttime=true; int start() { string txt=StringConcatenate( " Value: ",Value,"\n", " temp_: ",temp_,"\n", " firsttime: ",firsttime); if(firsttime) { temp_=Value; firsttime=false; } // значение присваевается тольо ОДИН раз Print(txt); Comment(txt); }
aquí hay un ejemplo similar
el valor de la primera variable se pasa a la segunda sólo una vez y el valor de la segunda variable no debe cambiar en la ejecución posterior del programa
pero cada vez que se modifica la primera variable, cambia el valor de la segunda, lo que no debería ser
Cuando se cambia la variable externa, el EA se reinicia, lo que lleva a la inicialización de las variables, declaradas a nivel global. Esto es correcto. Si quiere evitarlo, utilice las Variables Globales.
erróneo - no hay inicialización en absoluto
aquí hay una prueba de la ayuda
Las variables globales se inicializan una sola vez, justo después de cargar el programa en la memoria del terminal cliente.
y en general, no se trata de la inicialización sino del cambio de variables
Lea atentamente el código
Y el problema se produce sólo con las variables de tipo string
¡Con otros tipos no hay problema!
esta es la segunda opción
resulta que las variables apuntan a la misma ubicación de memoria después de la primera asignación
Me gustaría saber de qué construcción es esto
He aquí un ejemplo
siempre tienes el StringVal != backup y firsttime siempre será verdadero porque (init) se inicia una sola vez pero cada vez que reinicias el EA y se inicia uno nuevo cuando cambias de ventana de información o cuando cambias de set al iniciar la terminal . Así que cuando se cambiaStringVal se inicia el init de nuevo.
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Si compilo como un experto
entonces cuando cambio el StringVal, la copia de seguridad cambia inmediatamente
y la última Impresión no se llama
¿Dónde está el problema?