Erreurs, bugs, questions - page 240

 

Je suis bien conscient de l'évaluation tronquée de la condition. J'espère que cela répond à une partie de la question. Et les contrôles nécessaires seront effectués. Dans la deuxième option, si vous échangez s1.process et s2.process, le flux de travail est correct. La question ne portait pas sur ce point. Je demandais le résultat global. Le résultat logique global ne dépend pas de l'évaluation abrégée de la condition. La question portait sur le comportement de la variable locale en tant que variable statique pour les objets d'une même classe. Comme nous le savons, les objets d'une classe écrasent une variable statique.

Lemien : "En théorie, le code devrait fonctionner exactement de la même manière. Mais... Les variantes fonctionnent différemment". doit être compris comme "la valeur de retour devrait être identique, mais elles sont différentes".

Ais:

Cela ressemble soit à une récursion cachée, avec les effets secondaires habituels, soit à ...


Oui, ça ressemble à une récursion. Mais, les mêmes méthodes de différents objets sont dites imbriquées. Le même est exclu. En effectuant la sortie vers le fichier, j'ai découvert que d1 laisse la valeur définie pour d1 niveau inférieur lorsqu'il retourne au niveau supérieur.

 
Vigor:

Je suis bien conscient de l'évaluation abrégée de la condition. J'espère que cela répond à une partie de la question. Dans la deuxième variante, si nous intervertissons s1.process et s2.process, cela fonctionne correctement. La question ne portait pas sur ce point. La question portait sur le résultat global. Le résultat logique général ne dépend pas de l'évaluation de la condition abrégée. La question portait sur le comportement de la variable locale en tant que variable statique pour les objets d'une même classe. Comme nous le savons, une variable statique est écrasée par les objets de la même classe.

Oui, ça ressemble à une récursion. Mais, les mêmes méthodes de différents objets sont dites imbriquées. Les mêmes méthodes du même objet sont appelées. Après avoir effectué la sortie vers le fichier, j'ai découvert que d1 laisse la valeur définie pour le niveau d1 inférieur lorsqu'il retourne au niveau supérieur.

Montrez un exemple pour illustrer le problème. Ce que vous avez donné ne montre en aucun cas une "corruption de variable locale". Un code fonctionnel que nous pourrions exécuter par nous-mêmes.

 

Pourquoi devez-vous tout faire pour les développeurs de produits ? Manque de confiance dans les qualifications des développeurs tiers ? Il me semblait que d'après mes explications détaillées, il suffit de vérifier une fois de plus ce qu'il advient des variables locales des méthodes d'une même classe lorsqu'elles sont imbriquées.

OK, si j'ai un peu de temps libre, je vais écrire un exemple spécial.

 
Vigor:

Pourquoi devez-vous tout faire pour les développeurs de produits ? Manque de confiance dans les qualifications des développeurs tiers ? Il me semblait que d'après mes explications détaillées, il suffit de vérifier une fois de plus ce qu'il advient des variables locales des méthodes d'une même classe lorsqu'elles sont imbriquées.

OK, si j'ai un peu de temps libre, je vais écrire un exemple spécial.

Est-il reproductible sous un débogueur ?
 
Vigor:

Pourquoi devez-vous tout faire pour les développeurs de produits ? Manque de confiance dans les qualifications des développeurs tiers ? Il me semblait que d'après mes explications détaillées, il suffit de vérifier une fois de plus ce qu'il advient des variables locales des méthodes d'une même classe lorsqu'elles sont imbriquées.

OK, si j'ai un peu de temps libre, je vais écrire un exemple spécial.

Il n'y a aucun moyen de reproduire le problème ci-dessus.
 

Comment puis-je obtenir les prix actuels de différentes paires de devises en multidevises ? Lors des tests, SymbolInfoTick() ne renvoie que les prix de l'instrument actuel et génère l'erreur 4302 lorsqu'on essaie d'accéder à d'autres paires.

 
-Alexey-:

Est-il exact que par le code de l'indicateur,

lors de son ajout ou de sa recompilation dans le tableau, l'unité est imprimée 2 fois ? La condition est remplie deux fois dans ce cas ? Expliquez-moi, j'ai besoin qu'il soit exécuté une fois.

Ne serait-il pas plus simple de placer la partie qui n'est exécutée qu'une fois dans le bloc d'initialisation ?

Ou est-il nécessaire d'avoir une exécution dans la calculatrice de l'indicateur ?

 
stringo:
Il n'y a aucun moyen de reproduire le problème ci-dessus.
Exemple avec commentaires
Dossiers :
overtest.mq5  2 kb
 
mql5:
Est-ce qu'il joue sous le débogueur ?
Mais sous le débogueur, tout va bien.
 
Interesting:

Ne serait-il pas plus simple de placer la partie qui n'est exécutée qu'une fois dans le bloc d'initialisation ?

Ou doit-il être exécuté une fois dans la calculatrice de l'indicateur ?

Je l'ai trouvé. Dans un graphique, la fenêtre réduite de la deuxième copie de l'indicateur était - c'est pourquoi il s'est imprimé la deuxième fois. Désolé - tout fonctionne correctement. Je ne l'ai pas remarqué moi-même :) J'ai supprimé mes messages précédents.
Raison: