Wie erhält man die Länge von Enum und Item in MQL4/MQL5? - Seite 2

 
Alain Verleyen:
Die Länge ist nie unbekannt und dieses Thema ist nur das Ergebnis eines schlechten Designs.
Diese Anforderung stammt aus einem AutoTester-Projekt.
In vielen Indikatoren/EAs, Eingabeparameter enthalten benutzerdefinierte enum, müssen wir herausfinden, was Element (und relativen Wert) in enum.
Also, sagen Sie nicht "schlechtes Design". Blah...blah...
 
Xiangdong Guo:
Diese Anforderung stammt aus einem AutoTester-Projekt.
In vielen Indikatoren/EAs, Eingabeparameter enthalten benutzerdefinierte enum, müssen wir herausfinden, was Element (und relativen Wert) in enum.
Also, sagen Sie nicht "schlechtes Design". Blah...blah...
Natürlich ist es ein schlechtes Design. Aber es ist kein Problem für mich.
 
Marco vd Heijden:
Was meinen Sie mit "Länge der Aufzählung"?
enum fruit
  {
   APPLE=0,//APPLE
   BANANA=1,//BANANA
   GRAPE=2,//GRAPE
   ORANGE=3,//ORANGE
   CARROT=4,//CARROT
  };
  
sinput fruit type;//PICK A FRUIT 

Vielleicht ist die Karotte keine Frucht... ich verstehe immer noch nicht, was Xiangdong Guo mit "Länge der Aufzählung" meint

Die Anzahl der Buchstaben der einzelnen Optionen?

Wie viele Optionen sind möglich?

Der numerische Wert der Option?

Nicht nur schlechtes Design, sondern auch nicht ganz klar, was er meint.

 
Marco vd Heijden:
Die Anzahl der Werte, also 5 in Ihrem Beispiel der Früchte.
 
Alain Verleyen:
Die Anzahl der Werte, so 5 in Ihrem Beispiel der Früchte.

Ich stimme zu, es ist statisch, es kann nicht variabel sein, so wird immer ein bekannter fester Wert zu starten mit sein.

Wenn Xiangdong Guo jedochIndikatoren testet, die er nicht selbst entworfen oder geschrieben hat, und die Eingabeparameter wissen oder automatisch erkennen möchte...

Ich bin mir nicht sicher, wie das Wissen um die Anzahl der verfügbaren Optionen helfen könnte. Vielleicht will er alle verfügbaren Optionen testen und sucht einfach nach der Anzahl der durchzuführenden Tests?

Ich würde nach den angenommenen Optionen scannen, um diese Werte aufzulösen, sobald Sie versuchen, außerhalb der Grenzen der verfügbaren Optionen zu konvertieren, wird die Fehlermeldung cannot convert enum erzeugt, da sie nicht existiert.

 
Marco vd Heijden:

MT4/MT5 verwenden C++/C#-Funktionen zum Abrufen von Elementen aus Enum. Aber MetaQuotes portiert diese Funktionen nicht auf MQL4/MQL5. Hum...hum...

enum DURATION_INTERVALS  // Enumeration of named constants
   {
    month=1,     // Interval of one month
    two_months,  // Two months
    quarter,     // Three months - quarter
    halfyear=6,  // Half a year
    year=12,     // Year - 12 months
   };

input DURATION_INTERVALS HistoryDuration = month;

 
Xiangdong Guo:

MT4/MT5 verwenden C++/C#-Funktionen zum Abrufen von Elementen aus Enum. Aber MetaQuotes portiert diese Funktionen nicht auf MQL4/MQL5. Hum...hum...

Welche Funktion? Was ist das Problem? Warum wollen Sie eine Schleife durch die Elemente der Aufzählung machen?
 
Alain Verleyen:
Welche Funktion? Was ist das Problem? Warum wollen Sie eine Schleife durch die Enum-Elemente machen?

Wenn jemand etwas tun will/braucht, was mit MQL nicht möglich ist, bedeutet das nicht unbedingt "schlechtes Design".

Zum Themenstarter: Es ist nicht möglich, das zu tun, was Sie in der aktuellen Version von MQL wollen.

Die einzige Möglichkeit ist, alle Elemente in ein Array zu kopieren und Ihre Schleife mit diesem Array zu machen. Aber das ist nur machbar, wenn Sie den Code ändern können.

 
Andrey Barinov:

Wenn jemand etwas tun will/braucht, was mit MQL nicht möglich ist, bedeutet das nicht unbedingt "schlechtes Design".

Zum Themenstarter: Es ist nicht möglich, das zu tun, was Sie in der aktuellen Version von MQL wollen.

Die einzige Möglichkeit ist, alle Elemente in ein Array zu kopieren und Ihre Schleife mit diesem Array zu machen. Aber das ist nur machbar, wenn Sie den Code ändern können.

Die Verwendung einer Enum anstelle eines Arrays ist ein schlechtes Design. Ist das nicht so?

 
Alain Verleyen:

Die Verwendung einer Aufzählung anstelle eines Arrays ist ein schlechter Entwurf. Ist das nicht so?

Nein, die Verwendung eines Arrays anstelle einer Enum ist ein schlechtes Design.

Beispiel: Stellen Sie sich vor, Sie haben einen String-Wert. Und die Aufgabe besteht darin, herauszufinden, ob dieser String einem der Enum-Elementnamen entspricht/enthält (EnumToString()).

Wie würden Sie dies lösen?