Zwei Felder mit zwei Datensätzen haben dieselbe Bezeichnung in OCaml

8

Ich habe zwei Datensatztypen definiert:

%Vor%

Und ich habe später einen Fehler für eine Codezeile: Error: The record field label typ belongs to the type Syntax.func but is mixed here with labels of type Syntax.name

Könnte mir jemand sagen, ob wir nicht zwei Felder mit zwei Datensätzen haben sollten, die dasselbe Label haben, wie typ hier, was den Compiler verwirren lässt.

    
SoftTimur 19.01.2012, 15:46
quelle

3 Antworten

13

Nein, Sie können das nicht, weil dadurch die Inferenz des Typs unterbrochen wird.

Übrigens können Sie den Modul-Namespace verwenden, um das zu beheben:

%Vor%

Und später können Sie den Feldnamen mit dem richtigen Modul voranstellen:

%Vor%

Beachten Sie, dass Sie nur das erste Feld voranstellen müssen, und der Compiler wird automatisch verstehen, welchen Typ der Wert hat, den Sie schreiben.

    
Thomas 19.01.2012, 16:35
quelle
8

Die Ocaml-Sprache erfordert, dass alle Felder in einem Modul unterschiedliche Namen haben. Andernfalls kann es den Typ der folgenden Funktion nicht ableiten

%Vor%

, weil es vom Typ name -> dtype oder vom Typ func -> dtype

sein könnte

Übrigens, ich schlage vor, dass Sie ein Suffix wie _t für alle Ihre Typnamen haben.

    
Basile Starynkevitch 19.01.2012 15:49
quelle
0

Sie können type annotation in der Funktionssignatur verwenden, wenn der Compiler den Typ aus der doppelten Datensatzbezeichnung nicht ableiten konnte. Zum Beispiel

%Vor%     
Mianyu Wang 15.03.2018 19:58
quelle

Tags und Links