Die F # Tutorial den folgenden Ausschnitt umfasst:Anonym Satzart innerhalb Vereinigung diskriminiert
/// A record for a person's first and last name
type Person = {
First : string
Last : string
}
/// define a discriminated union of 3 different kinds of employees
type Employee =
| Engineer of Person
| Manager of Person * list<Employee> // manager has list of reports
| Executive of Person * list<Employee> * Employee // executive also has an assistant
Die Tatsache, dass Manager, und Vorstand wie beschrieben Tupeln beleidigt meine Empfindlichkeiten (ich leicht beleidigt bin). Es erscheint mir nicht besonders ausdrucksstark. Ich habe versucht, sie wie folgt zu ändern:
/// define a discriminated union of 3 different kinds of employees
type Employee =
| Engineer of Person
| Manager of { Name: Person; Reports: Employee list } // manager has list of reports
| Executive of { Name: Person; Reports: Employee list; Assistant: Employee} // executive also has an assistant
Leider sind die Definitionen von Manager und Vorstand nun einen Fehler geben: „Dieses Konstrukt ist veraltet, betrachten, anstatt einen separaten Datensatztyp mit“ Ok, scheint fair, nennen wir es ManagerType. Aber warten Sie ... ManagerType bezieht sich auf Employee (für den Berichtsteil), und Employee verweist auf ManagerType (für die Manager-Option).
Gibt es hier eine Lösung? Ist es nicht möglich, zwei Datenstrukturen in Bezug aufeinander zu definieren?
Interessant. Können wir auch die Vererbung verwenden? Kann Executive von Manager abgeleitet werden? Oder funktioniert das nur mit Records? –