Errori, bug, domande - pagina 240

 

Sono ben consapevole della valutazione tronca della condizione. Spero che questo risponda a parte della domanda. E saranno fatti i controlli necessari. Nella seconda opzione, se scambiate s1.process e s2.process, il flusso di lavoro è corretto. La domanda non riguardava questo. Chiedevo del risultato complessivo. Il risultato logico complessivo non dipende dalla valutazione abbreviata della condizione. La domanda riguardava il comportamento della variabile locale come variabile statica per gli oggetti di una classe. Come sappiamo, gli oggetti di una classe sovrascrivono una variabile statica.

Ilmio: "In teoria, il codice dovrebbe funzionare esattamente allostesso modo. Ma... Le varianti funzionano in modo diverso". dovrebbe essere inteso come "il valore di ritorno dovrebbe essere identico, ma sono diversi".

Ais:

Sembra o una ricorsione nascosta, con il solito insieme di effetti collaterali, o ...


Sì, sembra una ricorsione. Ma gli stessi metodi di oggetti diversi sono chiamati nidificati. Lo stesso è escluso. Facendo l'output al file ho scoperto che d1 lascia il valore definito per il livello d1 sottostante quando ritorna al livello superiore.

 
Vigor:

Sono ben consapevole della valutazione ridotta della condizione. Spero che questo risponda a parte della domanda. Nella seconda variante, se scambiamo s1.process e s2.process, funziona correttamente. La domanda non riguardava questo. La domanda riguardava il risultato complessivo. Il risultato logico generale non dipende dalla valutazione delle condizioni abbreviate. La domanda riguardava il comportamento della variabile locale come variabile statica per gli oggetti di una classe. Come sappiamo una variabile statica viene sovrascritta da oggetti della stessa classe.

Sì, sembra una ricorsione. Ma gli stessi metodi di oggetti diversi sono chiamati nidificati. Vengono chiamati gli stessi metodi dello stesso oggetto. Avendo fatto l'output su file ho scoperto che d1 lascia il valore definito per il livello d1 sottostante quando ritorna al livello superiore.

Mostra un esempio per illustrare il problema. Quello che avete dato non mostra in alcun modo la "corruzione della variabile locale". Un codice funzionante che potremmo eseguire da soli

 

Perché dovete fare tutto voi per gli sviluppatori del prodotto? Mancanza di fiducia nelle qualifiche degli sviluppatori terzi? Mi è sembrato che, secondo le mie spiegazioni dettagliate, sia sufficiente controllare ancora una volta cosa succede alle variabili locali dei metodi di una classe quando sono annidate.

Ok, se ho un po' di tempo libero scriverò un esempio speciale.

 
Vigor:

Perché dovete fare tutto voi per gli sviluppatori del prodotto? Mancanza di fiducia nelle qualifiche degli sviluppatori terzi? Mi è sembrato che, secondo le mie spiegazioni dettagliate, sia sufficiente controllare ancora una volta cosa succede alle variabili locali dei metodi della stessa classe quando sono annidate.

Ok, se ho un po' di tempo libero scriverò un esempio speciale.

È riproducibile sotto un debugger?
 
Vigor:

Perché dovete fare tutto voi per gli sviluppatori del prodotto? Mancanza di fiducia nelle qualifiche degli sviluppatori terzi? Mi è sembrato che, secondo le mie spiegazioni dettagliate, sia sufficiente controllare ancora una volta cosa succede alle variabili locali dei metodi di una classe quando sono annidate.

Ok, se ho un po' di tempo libero scriverò un esempio speciale.

Non c'è modo di riprodurre il problema di cui sopra.
 

Come posso ottenere i prezzi attuali per diverse coppie di valute in multi-valuta? Durante i test, SymbolInfoTick() restituisce solo i prezzi dello strumento corrente e genera l'errore 4302 quando si cerca di accedere ad altre coppie.

 
-Alexey-:

È giusto che dal codice dell'indicatore,

quando si aggiunge o si ricompila al grafico, l'unità viene stampata 2 volte? La condizione è soddisfatta due volte in questo caso? Per favore spiegatemi, ho bisogno che venga eseguito una volta sola.

Non sarebbe più facile mettere la parte che viene eseguita una volta nel blocco di inizializzazione?

O è necessario avere un'esecuzione nella calcolatrice dell'indicatore?

 
stringo:
Non c'è modo di riprodurre il problema di cui sopra.
Esempio con commenti
File:
overtest.mq5  2 kb
 
mql5:
Sta suonando sotto il debugger?
Ma sotto il debugger va bene.
 
Interesting:

Non sarebbe più facile mettere la parte che viene eseguita una volta nel blocco di inizializzazione?

O deve essere eseguito una volta nel calcolatore dell'indicatore?

L'ho trovato. In un grafico, la finestra minimizzata della seconda copia dell'indicatore era - ecco perché stava stampando la seconda volta. Mi dispiace - tutto funziona correttamente. Non l'ho notato io stesso :) Ho cancellato i miei post precedenti.
Motivazione: