Fehler, Irrtümer, Fragen - Seite 714

 
victorg:

Ein Makro und eine Inline-Funktion sind in der Tat unterschiedliche Dinge. Aber das ist nicht das, was ich meine. Hier ein Beispiel, bei dem die Werte der Argumente zur Kompilierzeit unbekannt sind

Im ersten Fall muss der Code in die aktuelle Funktion eingefügt werden (nehme ich an) und im zweiten Fall wird die Funktion mit Parametern aufgerufen , die über den Stack übergeben werden (nehme ich an). Zu Optimierungszwecken kann der Compiler jedoch auch die zweite Variante durch Substitution implementieren. Ist das so? Ich weiß es nicht. Deshalb habe ich gefragt.

Es sind die Metakvotts, die gefoltert werden müssen. Aber meine Meinung deckt sich mit Ihrer (wegen der Optimierung könnte das Ergebnis anders ausfallen).
 

Das Ellipsenobjekt wird nur mit der Maus hervorgehoben, wenn Sie auf die Ankerpunkte klicken.

Ist es ein Fehler oder eine Funktion? Sie ist sehr umständlich umgesetzt.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов - Документация по MQL5
 
Die manuell eingestellte vertikale Skala wird bei einem Neustart nicht gespeichert. Auch ein Ärgernis.
 
MetaDriver:

Это что, юмор такой чёрный?

1.  Извини, - бред.  Я понимаю, тут паранойя в моде, и является ломовым аргументом за "почему так не надо делать".  Никакой опасности не вижу в упор. Смотрел внимательно, если чё.  Любое имя, в конечном счёте есть ссылка.  Индексация есть обычное расширение понятия имени. Не более.  Давай запретим присваивание вообще.  В целях безопасности.  Ссылки же крайне опасны так?

2.  Духу объектно-ориентированного программирования, при такой логике, яростно противоречат С++, С#, Делфи, пара дюжин менее популярных языков, в которых индексаторы совершенно нормально работают и справа и слева.  Причём здравому смыслу и моему духу это почему-то не противоречит.

Индексаторы делаются для связи с внешней средой.  Их функция именно интерфейсная.  Я могу инкапсулировать и прятать что угодно, но индексы мне нужны для оперирования объектами как массивами. Фактически все массивы как-то устроены. Например обычные динамические массивы mql. Может запретим их слева от оператора присваивания ставить?  Заменим функцией какой-нибудь типа SetArrayValue(array, i, j, value);  Заодно и в читабельности выиграем. Да и отладка станет куда проще.  Мля. Уф..

3.  А как насчёт того, чтоб сделать нормальный индексатор?  Горничная это конечно классно, но королева всё-таки лучше.

4.  Вот в этом месте у меня крыша конкретно начала ехать.  Это что, нечитабельно??

Вот это читабельнее, да?

  t.setDataElement(i, i*i);

Круто.  Пожалуй пойду лечиться.

5.  Ваще круто.

6. Я плакаль.


e(array, i, j, value); Dies wird auch die Lesbarkeit verbessern. Und die Fehlersuche wird auch viel einfacher. Scheiße. Igitt...

Nun, ein Setzer hat den Vorteil, dass man etwas mehr tun kann als eine einfache Gleichung.

Sie können beispielsweise Informationen protokollieren, Daten konvertieren (wenn es sich um Zeichenketten oder komplexere Daten handelt), Nachrichten an andere Objekte senden, wenn etwas Wichtiges passiert (z. B. Daten aktualisieren).

Wie erfährt Ihr Objekt, wenn sich das Datum geändert hat? Anscheinend werden Sie Zitate speichern...
Oh ja, das ist ein falsches Problem, denn Ihr Objekt ist eher wie eine Struktur und verwaltet nicht wirklich etwas.
Alles wird in einer anderen Müllklasse erledigt, die alles handhabt, oder noch schlimmer, alles passiert in onStart(), onTick(), ... ! :)

Ich wünsche Ihnen einen schönen Tag

 
MetaDriver:

3. wie wäre es, einen normalen Indexer zu machen? maid ist cool, aber queen ist besser.

Muti-Dichtung. Im Vergleich zu einem normalen l-Wert ist dies jedoch sehr viel zeitaufwändiger. Aber es wird genau so aussehen, wie Sie es brauchen.

______

Ach, verdammt, nein. Dann brauchen Sie eine Überladung des Typs ghost operator. Schade.

 
speedy:

Nun, der Vorteil des Setzers ist, dass man etwas mehr als eine einfache Gleichung machen kann.

Sie können zum Beispiel Informationen protokollieren, Daten konvertieren (wenn es sich um Strings oder komplexere Daten handelt), Nachrichten an andere Objekte senden, wenn etwas Wichtiges passiert (z. B. Daten aktualisieren).

Wie erfährt Ihr Objekt, wenn sich das Datum geändert hat? Anscheinend werden Sie Zitate speichern...
Oh ja, das ist ein falsches Problem, denn Ihr Objekt ist eher eine Struktur und steuert nicht wirklich etwas.
Alles wird in einer anderen Müllklasse erledigt, die alles handhabt, oder noch schlimmer, alles passiert in onStart(), onTick(), ... ! :)

Ich wünsche Ihnen einen schönen Tag

Der Punkt ist, dass der Indexer in Bezug auf die Funktionen dem Setter entspricht . Sie ist genauso implementiert wie eine Funktion, deren Inhalt alles sein kann (der einfachste typische Fall ist die Überprüfung von Array-Grenzen und die Behandlung anderer Fehler), und sie gibt nicht nur eine Referenz auf ein Array-Element zurück.

Ich wünsche Ihnen auch einen schönen Tag.

(Entschuldigen Sie den gestrigen Tonfall, ich war etwas nervös - Ärger auf der Arbeit. Sie hatten nichts damit zu tun. Es sei denn, Sie sind zu kategorisch :)

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 
TheXpert:

Muti-Dichtung. Im Vergleich zu einem normalen l-Wert ist dies jedoch sehr viel zeitaufwändiger. Aber es wird so aussehen, wie Sie es brauchen.

______

Ach, verdammt, nein. Dann müssen Sie den Typumwandlungsoperator überladen. Schade.

Ich denke, sie werden es tun, denn es gibt einen offensichtlichen Fehler in der Sprache der Referenzrückgaben.

Sie müssen keine Referenzvariablen erstellen, aber die Rückgabe von L-Werten aus Funktionen ist heilig... :)

Ich denke nicht, dass es prinzipiell nicht gelöst werden kann - die Sprache hat übliche mql-Arrays und sie fühlen sich auf beiden Seiten des Zuweisungsoperators sehr wohl. Aber sie sind C++-Klassen durch ihre Implementierung!

Hier ist ein weiteres Beispiel aus der gleichen Serie, das zwar kompiliert wird, aber nicht funktioniert.

#define _MyContainer(name,type,size)  struct name { public: type array[size]; type At(int i) {return array[i];} }
#define  ASize 8
#define  BSize 4

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   _MyContainer(MyClass, int, ASize);
   MyClass MyVar;
   Print(sizeof(MyVar)); 
   for(int i=0;i<ASize;i++)
     {
      MyVar.array[i]=i*i;
     }
   for(int i=0;i<ASize;i++)
     {
      Print(MyVar.At(i));
     }
   _MyContainer(My2DBag, MyClass, BSize);
   My2DBag MyVar2D;
   for(int i=0;i<BSize;i++)
     {
      for(int j=0;j<ASize;j++) MyVar2D.array[i].array[j]=(i+1)*(j+1);
     }
   for(int i=0;i<BSize;i++)
     {
      for(int j=0;j<ASize;j++) Print(MyVar2D.At(i).At(j));
// Run-time ERROR:  DefTest (USDJPY,M30)  invalid pointer access in 'DefTest.mq5' (38,46)

//      for(int j=0;j<ASize;j++) Print(MyVar2D.array[i].At(j));
     }
  }

Es geht mir nicht darum, dass sie nicht kompiliert werden sollten, sondern darum, dass sie funktionieren sollten. :)

 
MetaDriver:

...
Ich sage nicht, dass es nicht kompiliert werden sollte, ich sage nur, dass es funktionieren sollte... :)

Ja, Sie haben recht, es ist ein Compilerfehler, wir werden ihn beheben.
 

MQL5 hat eine wunderbare Konstante IS_DEBUG_MODE, die zur Gruppe Andere Konstanten gehört. Können wir eine solche Konstante für einen Prüfer hinzufügen? Etwas wie IS_TESTER_MODE...

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы - Документация по MQL5
 
denkir:

MQL5 hat eine wunderbare Konstante IS_DEBUG_MODE, die zur Gruppe Andere Konstanten gehört. Können wir eine solche Konstante für einen Prüfer hinzufügen? Etwas wie IS_TESTER_MODE...

Würden diese Konstanten nicht funktionieren?

ENUM_MQL5_INFO_INTEGER

Kennung

Beschreibung

Art der Immobilie

MQL5_PROGRAMM_TYPE

Typ des mql5-Programms

ENUM_PROGRAMM_TYPE

MQL5_DLLS_ALLOWED

Erlaubnis zur Verwendung der DLL für dasaktuell laufende Programm

bool

MQL5_TRADE_ALLOWED

Erlaubniszum Handel für dieses laufende Programm

bool

MQL5_DEBUGGING

Zeichen eines laufenden Programms, das im Debug-Modus arbeitet

bool

MQL5_TESTING

Zeichen der Ausführung eines Programms im Tester

bool

MQL5_OPTIMIERUNG

Zeichen der Ausführung eines Programms während der Optimierung

bool

MQL5_VISUAL_MODE

Zeichen der Ausführung eines Programms im visuellen Testmodus

bool