Übergeben von automatisch typisierten Vars zur Funktion in D?

8

Dies funktioniert nicht in D:

%Vor%

Ich bin nur neugierig, wird das jemals funktionieren? Oder ist das technisch unmöglich? (Oder einfach nur dumm?)

Kann das auf irgendeine andere Weise erreicht werden? Ich nehme an, ich könnte das ... verwenden und die Liste der Argumente durchsehen, aber ich mache irgendwie eine Bibliothek für faule Neulinge und möchte, dass sie einfach Funktionen erstellen können, ohne sich wirklich um Datentypen zu kümmern. Ich spiele mit der Idee, eine Struktur namens var like

zu erstellen %Vor%

Aber mein Kopf fängt schon an zu schmerzen. Und ich fühle irgendwie, dass ich etwas verpasse. Ich bin mir auch schmerzlich bewusst, dass dies wahrscheinlich die Vorlagen für ... Sind sie? Von den wenigen, die ich kenne, würde eine Vorlage so aussehen (?)

%Vor%

Aber jetzt sieht es nicht mehr so ​​sauber aus. Vielleicht bekomme ich das alles zurück. Vielleicht beruht meine Verwirrung auf meiner Überzeugung, dass auto ein dynamischer Typ ist, vergleichbar mit var i javascript, aber in Wirklichkeit ist es etwas anderes?

Und wenn es kein dynamischer Typ ist, und dies ist wahrscheinlich ein ganz anderes Thema, ist es möglich, einen zu erstellen? Oder ist vielleicht sogar eine Open-Source-Lib verfügbar? Eine Liblazy vielleicht?

(PS. Ja, vielleicht ist der faule Devver ich:)

    
0scar 28.06.2010, 15:16
quelle

4 Antworten

6

Ich füge nur hinzu, dass etwas in der Nähe Ihrer Idee des Laufzeittyp-Polymorphismus (die var -Struktur) bereits in Std.variant -Modul (nur D2).

Außerdem ist auto eigentlich ein Schlüsselwort, das nichts tut - es wird verwendet, wenn Sie einen Typmodifizierer ohne Typ benötigen. Wenn Sie keinen Typ angeben, leitet D den Initialisierungsausdruck für Sie ab. Zum Beispiel funktionieren alle diese:

%Vor%     
Vladimir Panteleev 28.06.2010, 15:35
quelle
12

Wenn doSomething generisch für jeden Typ von a und b ist, dann ist die Template-Version das Richtige:

%Vor%

Der Compiler erkennt die zum Zeitpunkt der Kompilierung von T und U dargestellten Typen und generiert den richtigen Code.

    
JSBձոգչ 28.06.2010 15:24
quelle
2

Halt, tu das nicht! Ich fürchte, wenn Sie Typen früh ignorieren, wird es schwieriger, sie zu erfassen, besonders da D nicht dynamisch typisiert wird. Ich glaube, Typen sind auch in dynamischen Sprachen wichtig.

Sie können den Typ in D2 ignorieren, indem Sie std.variant verwenden und es kann den Code aussehen wie die Sprache dynamisch eingegeben wird.

Sie haben die Verwendung der Vorlage korrekt, aber nicht automatisch. D erlaubt Ihnen die Verwendung dieses Wortes in vielen Fällen, wie zum Beispiel den Rückgabetyp, da D ein sehr gutes System zum Ableiten eines Typs hat. Parameter sind etwas, das nicht mit doppelten Informationen für den Typ, auf den geschlossen werden soll, geliefert wird.

Zusätzliche Informationen zur Standardvariable: Wenn Sie dies genauer betrachten, ist das noch komplizierter als das, was Sie wünschen. Um beispielsweise den Wert einer typisierten Variablen zuzuweisen, ist ein Methodenaufruf erforderlich. und Sie können nicht auf Klassenmethoden von der Referenz zugreifen.

%Vor%     
he_the_great 28.06.2010 16:18
quelle
1
  

Vielleicht beruht meine Verwirrung auf meiner Überzeugung, dass Auto ein dynamischer Typ ist, vergleichbar mit var i javascript, aber in Wirklichkeit ist es etwas anderes?

auto ist eine Speicherklasse . In der Tat ist es die Standardspeicherklasse. es bedeutet nichts weiter als "das hat eine Speicherklasse".

Wenn nun der Compiler den Typ eindeutig ableiten kann, ist alles in Ordnung. Ansonsten ist es ein Fehler:

%Vor%

So auto ist überhaupt kein Typ. Denken Sie daran, dass dies alles zur Kompilierzeit geschehen muss, nicht zur Laufzeit. Sehen wir uns nun eine Funktion an:

%Vor%

Kann der Compiler automatisch auf die Typen a , b oder return schließen? Nee. Zusätzlich zu den Grundelementen, die mit dem add-Operator arbeiten ( int , byte , double usw.), könnten benutzerdefinierte Typen diese Funktion überlasten und so weiter. Da der Compiler keinen dieser Typen eindeutig ableiten kann, handelt es sich um einen Fehler. Typen müssen in Parametern angegeben werden, weil sie im Allgemeinen nicht abgeleitet werden können (im Gegensatz zu Deklarationen).

    
Bernard 28.06.2010 23:33
quelle

Tags und Links