Kurzusok
/
F#
F#
/
Tanterv
/
Diszkriminált uniók
Di

Diszkriminált uniók ebben a kurzusban: F#

15 feladat

A(z) Diszkriminált uniók fogalomról

A diszkriminált unió típus rögzített számú, elnevezett esetet képvisel. A diszkriminált unió minden értéke pontosan az egyik elnevezett esetnek felel meg. Az ilyen adattípust összegtípusnak nevezzük.

A diszkriminált unió minden esetéhez tartozhat opcionálisan adat, és a különböző esetekhez különböző típusú adat tartozhat. Ha egyik esethez sem tartozik adat, a diszkriminált unió ahhoz hasonlít, amit más nyelvek általában felsorolásnak (vagy enumnak) neveznek.

A diszkriminált uniót a type kulcsszóval definiáljuk, és nagyon kevés szintaxist igényel. Ez könnyen használhatóvá teszi őket, és sok helyen találkozhatsz velük, többek között az alapkönyvtárban is.

// 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

Egy adott esethez tartozó értéket úgy hozhatunk létre, hogy a nevére hivatkozunk, vagy a teljes nevére, ha a név nem egyedi. Mivel az esetnevek valójában konstruktorfüggvények, a hozzájuk tartozó adatot szokásos függvényargumentumként adhatjuk át.

let byName = Integer 2
let byFullName = Number.Invalid

A diszkriminált uniók strukturális egyenlőséggel rendelkeznek, ami azt jelenti, hogy két érték, amely ugyanahhoz az esethez tartozik és ugyanazzal az (opcionális) adattal rendelkezik, egyenértékű.

A diszkriminált uniókkal való munka javasolt módja a mintaillesztés, az azonosítóminta használatával:

let describe number =
    match number with
    | Integer i -> sprintf "Integer: %d" i
    | Float d  -> sprintf "Float: %f" d
    | Invalid   -> "Invalid"
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg

Tanuld meg a(z) Diszkriminált uniók fogalmat

A gyakorlás zárolva

Oldj fel még 10 feladatot, hogy gyakorolhasd a(z) Diszkriminált uniók fogalmat