Tracks
/
F#
F#
/
Lehrplan
/
Discriminated Unions
Di

Discriminated Unions in F#

15 Übungen

Über Discriminated Unions

Der Typ der diskriminierten Union repräsentiert eine feste Anzahl benannter Fälle. Jeder Wert einer diskriminierten Union entspricht genau einem der benannten Fälle. Diese Art von Datentyp ist als Summentyp bekannt.

Jeder Fall einer diskriminierten Union kann optional Daten enthalten, und verschiedene Fälle können unterschiedliche Datentypen haben. Wenn kein Fall Daten enthält, ähnelt die diskriminierte Union dem, was andere Sprachen üblicherweise als Enumeration (oder Enum) bezeichnen.

Eine diskriminierte Union wird mit dem Schlüsselwort type definiert und benötigt nur sehr wenig Syntax. Das macht sie einfach zu verwenden, und du findest sie an vielen Stellen, auch in der Basisbibliothek.

// Discriminated union without associated data
type Season =
    | Spring
    | Summer
    | Autumn
    | Winter

// Discriminated union with associated data
type Number =
    | Integer of int
    | Float of float
    | Invalid

Einen Wert für einen bestimmten Fall erstellst du, indem du seinen Namen oder, wenn der Name nicht eindeutig ist, seinen vollständigen Namen angibst. Da Fallnamen nur Konstruktorfunktionen sind, können zugeordnete Daten als normales Funktionsargument übergeben werden.

let byName = Integer 2
let byFullName = Number.Invalid

Diskriminierte Unionen besitzen strukturelle Gleichheit, was bedeutet, dass zwei Werte für denselben Fall und mit denselben (optionalen) Daten äquivalent sind.

Der bevorzugte Weg, mit diskriminierten Unionen zu arbeiten, ist der Musterabgleich mit dem Bezeichnermuster:

let describe number =
    match number with
    | Integer i -> sprintf "Integer: %d" i
    | Float d  -> sprintf "Float: %f" d
    | Invalid   -> "Invalid"
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab

Lerne Discriminated Unions

Das Üben ist gesperrt

Schalte 10 weitere Übungen frei, um Discriminated Unions zu üben