Fehler, Irrtümer, Fragen - Seite 240

 

Ich bin mir der verkürzten Bewertung der Bedingung durchaus bewusst. Ich hoffe, das beantwortet einen Teil der Frage. Und die notwendigen Kontrollen werden durchgeführt. Wenn Sie bei der zweiten Option s1.process und s2.process austauschen, ist der Arbeitsablauf korrekt. Die Frage bezog sich nicht darauf. Ich habe nach dem Gesamtergebnis gefragt. Das logische Gesamtergebnis hängt nicht von der verkürzten Bewertung der Bedingung ab. Die Frage bezog sich auf das Verhalten der lokalen Variable als statische Variable für Objekte einer Klasse. Wie wir wissen, überschreiben die Objekte einer Klasse eine statische Variable.

Meine: "Theoretisch sollte der Code genau gleichfunktionieren . Aber... Varianten funktionieren unterschiedlich". sollte als "der Rückgabewert sollte identisch sein, aber sie sind unterschiedlich" verstanden werden.

Ais:

Es sieht entweder wie eine versteckte Rekursion aus, mit den üblichen Nebeneffekten, oder ...


Ja, es sieht nach Rekursion aus. Die gleichen Methoden verschiedener Objekte werden jedoch als verschachtelt bezeichnet. Derselbe ist ausgeschlossen. Durch die Ausgabe in die Datei habe ich herausgefunden, dass d1 den für d1 definierten Wert in der darunter liegenden Ebene belässt, wenn er in die darüber liegende Ebene zurückkehrt.

 
Vigor:

Ich bin mir der verkürzten Bewertung des Zustands durchaus bewusst. Ich hoffe, dies beantwortet einen Teil der Frage. In der zweiten Variante, wenn wir s1.process und s2.process austauschen, funktioniert es korrekt. Die Frage bezog sich nicht darauf. Die Frage bezog sich auf das Gesamtergebnis. Das allgemeine logische Ergebnis hängt nicht von der verkürzten Konditionsauswertung ab. Die Frage bezog sich auf das Verhalten der lokalen Variable als statische Variable für Objekte einer Klasse. Wie wir wissen, wird eine statische Variable von Objekten der gleichen Klasse überschrieben.

Ja, es sieht nach Rekursion aus. Die gleichen Methoden verschiedener Objekte werden jedoch als verschachtelt bezeichnet. Dieselben Methoden desselben Objekts werden aufgerufen. Bei der Ausgabe in eine Datei wurde festgestellt, dass d1 den für die darunter liegende Ebene d1 definierten Wert verlässt, wenn er zur darüber liegenden Ebene zurückkehrt.

Zeigen Sie ein Beispiel, um das Problem zu veranschaulichen. Was Sie angegeben haben, zeigt in keiner Weise eine "lokale Variablenverfälschung". Ein funktionierender Code, den wir selbst ausführen können

 

Warum müssen Sie alles für die Produktentwickler tun? Mangelndes Vertrauen in die Qualifikation von Drittentwicklern? Nach meinen ausführlichen Erklärungen schien es mir ausreichend, noch einmal zu prüfen, was mit lokalen Variablen von Methoden einer Klasse geschieht, wenn sie verschachtelt sind.

OK, wenn ich etwas Zeit habe, werde ich ein spezielles Beispiel schreiben.

 
Vigor:

Warum müssen Sie alles für die Produktentwickler tun? Mangelndes Vertrauen in die Qualifikation von Drittentwicklern? Nach meinen ausführlichen Erklärungen schien es mir ausreichend zu sein, noch einmal zu prüfen, was mit lokalen Variablen von Methoden derselben Klasse geschieht, wenn sie verschachtelt sind.

OK, wenn ich etwas Zeit habe, werde ich ein spezielles Beispiel schreiben.

Ist das Problem mit einem Debugger reproduzierbar?
 
Vigor:

Warum müssen Sie alles für die Produktentwickler tun? Mangelndes Vertrauen in die Qualifikation von Drittentwicklern? Nach meinen ausführlichen Erklärungen schien es mir ausreichend zu sein, noch einmal zu prüfen, was mit lokalen Variablen von Methoden derselben Klasse geschieht, wenn sie verschachtelt sind.

OK, wenn ich etwas Zeit habe, werde ich ein spezielles Beispiel schreiben.

Es gibt keine Möglichkeit, das oben genannte Problem zu reproduzieren.
 

Wie kann ich aktuelle Preise für verschiedene Währungspaare in mehreren Währungen erhalten? Beim Testen gibt SymbolInfoTick() nur die Preise des aktuellen Instruments zurück und erzeugt den Fehler 4302, wenn versucht wird, auf andere Paare zuzugreifen.

 
-Alexey-:

Ist es richtig, dass durch den Code des Indikators,

beim Hinzufügen oder Neukompilieren zur Tabelle die Einheit 2 Mal gedruckt wird? Ist die Bedingung in diesem Fall zweimal erfüllt? Bitte erklären Sie mir das, ich muss es einmal ausführen.

Wäre es nicht einfacher, den Teil, der einmal ausgeführt wird, in den Initialisierungsblock zu packen?

Oder ist eine Ausführung im Rechner des Indikators erforderlich?

 
stringo:
Es gibt keine Möglichkeit, das oben genannte Problem zu reproduzieren.
Beispiel mit Kommentaren
Dateien:
overtest.mq5  2 kb
 
mql5:
Wird es unter dem Debugger abgespielt?
Aber unter dem Debugger ist es in Ordnung.
 
Interesting:

Wäre es nicht einfacher, den Teil, der einmal ausgeführt wird, in den Initialisierungsblock zu packen?

Oder muss sie einmal im Indikatorrechner ausgeführt werden?

Ich habe es gefunden. In einem Diagramm war das minimierte Fenster der zweiten Kopie des Indikators - deshalb wurde er zum zweiten Mal gedruckt. Es tut mir sehr leid - alles funktioniert korrekt. Ich habe es selbst nicht bemerkt :) Ich habe meine früheren Beiträge gelöscht.