F # Records: Felder mit identischen Namen

8

Bitte beachten Sie die folgenden Datensatzdefinitionen:

%Vor%

Ich verstehe nicht, warum a1 zu einem Fehler führt.

Alle Beispiele, die ich finden konnte, warum Sie es a2-weise tun müssen, nehmen an, dass alle Feldnamen in A und B denselben Namen haben - was natürlich mehrdeutig ist, aber nicht A und B sein sollte Unterscheidbar, wenn mindestens ein eigenes Feld vorhanden ist?

Vielleicht ist dies nur die Art und Weise, wie F # dies auswertet und das Hinzufügen des Typnamens zum ersten Feld ist natürlich keine große Sache, aber ich bin nur neugierig.

BEARBEITEN: Danke für die Antworten, die mir etwas merkwürdiges aufgefallen sind: Das ganze Snippet funktioniert, wenn ich es das erste Mal auswerte (ALT + Enter in VS 2010).

Wenn ich versuche, ein zweites Mal zu bewerten, erhalte ich den Fehler.

Wenn niemand dies reproduzieren kann, ist wahrscheinlich meine Installation von VS geborstet ...

EDIT2 (gut, Zeit um hier ein Konto zu erstellen, Entschuldigung für die Änderungen) Danke, wmeyer (und alle anderen), dass Sie sich die Zeit genommen haben, das Problem zu betrachten und mich auf mein Missverständnis aufmerksam zu machen, wie FSI funktioniert. Alles klar gemacht!

    
knotig 08.03.2011, 10:42
quelle

3 Antworten

6

Ich glaube nicht, dass Ihre Installation gebohrt ist.

Es macht Sinn, dass der Code beim zweiten Mal nicht funktioniert. Die alten Typen A und B sind noch vorhanden, sie sind nur beschattet .
Feldnamen hingegen werden niemals beschattet. (Andernfalls könnten Sie niemals den gleichen Feldnamen in zwei verschiedenen Datensätzen haben.)
Die "Vereinigung aller möglichen Datensätze" (siehe Antwort des Massif) enthält jetzt mehr als ein Element: das alte (schattierte) A und das neue A .

Um dieses Problem zu lösen, können Sie "Reset session" aus dem F # Interactive-Kontextmenü zwischen den Läufen verwenden. Oder wickeln Sie Ihren Code in ein Modul ein (dann sind die alten Datensatztypen weder zugänglich noch im Bereich).

    
wmeyer 08.03.2011 17:48
quelle
5

nur mit fsi überprüft, funktioniert dieser Code

%Vor%

Vielleicht haben Sie etwas anderes, das nicht in Ihrem Beitrag erwähnt wurde, das diese Zweideutigkeit verursacht?

    
desco 08.03.2011 10:49
quelle
3

Tatsächlich klingt es so, als sollte es funktionieren - von der Spezifikation :

  

Wenn field-labeli kein einziges ist   Bezeichner oder der ursprüngliche Typ ist a   Variablentyp, dann ist die Feldbezeichnung   aufgelöst, indem Feldbezeichnung ausgeführt wird   Auflösung (siehe §14.1) auf   field-labeli, was zu einem Satz führt   von Feldern FSeti. Jedes Element davon   Satz hat einen entsprechenden Satztyp,   was zu einer Reihe von Datensatztypen führt   RSeti. Der Schnittpunkt aller RSeti   muss einen einzelnen Datensatz geben Typ R, und   Jedes Feld wird dann in die   entsprechendes Feld in R.

Was bedeutet, dass solange die Vereinigung aller möglichen Datensätze, die diese Feldbezeichner enthalten, auf nur einen Datensatztyp reduziert wird, dies legal ist. Welchen Compiler benutzen Sie?

    
Massif 08.03.2011 10:50
quelle

Tags und Links