Fehler, Irrtümer, Fragen - Seite 2869

 
A100:

Sie haben einen Syntaxfehler - geben Sie ein Beispiel für funktionierenden Code mit (typenname) in Klammern. Sie könnten genauso gut (OnStart) in Klammern schreiben

Nun, es liegt kein Syntaxfehler vor

typename(J)

Aber halten Sie diesen Code bereits für einen Syntaxfehler?

(typename)J

Wenn hier ein Typumwandlungsprinzip funktionieren soll, und die Hilfe beide Varianten zulässt.

 
Roman:

Auf diese Weise gibt es keinen Syntaxfehler.

Gilt dies als Syntaxfehler?

Wenn das Prinzip der Typumwandlung hier funktionieren soll, und die Hilfe beides zulässt.

template<typename T>

typename ist kein Typ, es ist ein Schlüsselwort. In diesem Fall ist der Typ T. Die Umwandlung erfolgt in einen Typ, nicht in das Schlüsselwort.

Eine philosophische Rechtfertigung ist hier nicht angebracht. Obwohl, wenn MQL eine abstrakte Sprache wäre, könnten wir wahrscheinlich auf das Schlüsselwort zurückgreifen und es würde auf den ersten Platz in der Rangliste rücken

 
A100:

typename ist kein Typ, es ist ein Schlüsselwort. In diesem Fall ist der Typ T. Die Umwandlung erfolgt in einen Typ, nicht in ein Schlüsselwort

Eine philosophische Rechtfertigung ist hier nicht angebracht. Obwohl, wenn MQL eine abstrakte Sprache wäre, könnten wir es wahrscheinlich in das Schlüsselwort umwandeln, und es würde auf den 1.

Ich verstehe, dass typename kein Typ ist.
Aber in diesem Fall erleben wir eine Transformation.
Wir erhalten seinen Typ durch eine Konstante.
Vielleichtist dies syntaktisch nicht korrekt? Aber es funktioniert.

#define  A '+'

typename(A)
 
Roman:

Ich verstehe, dass typename kein Typ ist.
Doch in diesem Fall kommt es zu einer Umwandlung.
Von einer Konstante erhalten wir ihren Typ.
Vielleichtist dies nicht die richtige Syntax? Aber es funktioniert.

Es funktioniert, aber nicht so, wie Sie es sich vorstellen. Sie erhalten keinen Typ, sondern eine Zeichenkette. Ich wollte Ihnen das anhand eines Beispiels zeigen, aber ich habe unten einen Fehler erhalten.

Aber das bedeutet nicht, dass Sie Recht haben - nur ein weiterer Fehler des Compilers.

 
Kompilierungsfehler:
void OnStart()
{
    Print(typename("ushort"));      //(1) нормально
    Print(typename(typename('+'))); //(2) Error: 'typename' - unexpected token
}

Was ist der Unterschied zwischen (1) und (2)? Liebe Entwickler - vielleicht hat Roman recht und typename gibt jetzt type zurück?

Das Ergebnis wurde erwartet: string

 
A100:

Es funktioniert, aber nicht so, wie Sie es sich vorstellen. Sie erhalten keinen Typ, sondern eine Zeichenkette. Ich wollte es mit einem Beispiel zeigen, aber ich bekam eine Fehlermeldung:

Was meinen Sie damit, dass es kein Typ ist?
Es handelt sich um einen Typ, nicht um eine Zeichenkette.
ushort ist keine Zeichenkette.

#define   A '+'

void OnStart()
{
   Print(typename(A));
   Print(typename("string"));
}
2020.10.09 01:45:54.402 TestScript (MNQZ20,M1)  ushort
2020.10.09 01:45:54.402 TestScript (MNQZ20,M1)  string
 
Roman:

Wieso ist es kein Typ?
Ich bekomme nur einen Typ, keine Zeichenkette.
Ushort ist keine Zeichenkette.

Sie erhalten nicht ushort, sondern "ushort". Verstehen Sie den Unterschied? Wenn nicht, lesen Sie die Dokumentation, bevor Sie es verstehen.

Obwohl es cool wäre, eine echte ushort zu bekommen!

 
A100:

Sie erhalten nicht ushort, sondern "ushort". Verstehen Sie den Unterschied? Wenn nicht, lesen Sie die Dokumentation, um zu verstehen

Print() gibt sie also bereits als "ushort" mit einem String-Literal aus.
Was hat das damit zu tun? Allein die Tatsache, dass typename einen Typnamen zurückgibt!

 
Roman:

Damit wird Print() bereits als "ushort"-Stringliteral gedruckt.
Was hat das damit zu tun? Allein die Tatsache, dass typename einen Typnamen zurückgibt!

Haben Sie die Dokumentation unter dem Link gelesen? Auch dafür gibt es ein Beispiel. Leider ist mein Beispiel gescheitert.

 
A100:

Haben Sie die Dokumentation über den Link gelesen?

Was hat das mit Vorlagen zu tun?
Wenn die Verwendungssyntax nicht für eine Vorlage gilt, in diesem Fall.