Megosztás a következőn keresztül:


Beállítások

Az F# beállítástípust akkor használja a rendszer, ha egy névvel ellátott értékhez vagy változóhoz nem létezik tényleges érték. Egy beállítás mögöttes típussal rendelkezik, és tartalmazhat egy ilyen típusú értéket, vagy lehet, hogy nem rendelkezik értékkel.

Megjegyzések

Az alábbi kód egy olyan függvényt mutat be, amely egy beállítástípust hoz létre.

let keepIfPositive (a: int) = if a > 0 then Some(a) else None

Amint látható, ha a bemenet a nagyobb, mint 0, Some(a) létrejön. None Ellenkező esetben létre lesz hozva.

Az érték None akkor használatos, ha egy beállítás nem rendelkezik tényleges értékkel. Ellenkező esetben a kifejezés Some( ... ) értéket ad a lehetőségnek. Az értékek Some és None a mintaegyeztetés szempontjából hasznosak, mint az alábbi függvényben exists, amely azt adja vissza true , hogy a beállítás rendelkezik-e értékkel, és false ha nem.

let exists (x: int option) =
    match x with
    | Some(x) -> true
    | None -> false

A beállítások használata

A beállításokat gyakran használják, ha a keresés nem ad vissza egyező eredményt, ahogy az az alábbi kódban is látható.

let rec tryFindMatch pred list =
    match list with
    | head :: tail -> if pred (head) then Some(head) else tryFindMatch pred tail
    | [] -> None

// result1 is Some 100 and its type is int option.
let result1 = tryFindMatch (fun elem -> elem = 100) [ 200; 100; 50; 25 ]

// result2 is None and its type is int option.
let result2 = tryFindMatch (fun elem -> elem = 26) [ 200; 100; 50; 25 ]

Az előző kódban a rendszer rekurzív módon keres egy listát. A függvény tryFindMatch egy predikátumfüggvényt pred vesz fel, amely logikai értéket ad vissza, és egy listát keres. Ha egy olyan elem található, amely megfelel a predikátumnak, a rekurzió véget ér, és a függvény az értéket a kifejezésben Some(head)lehetőségként adja vissza. A rekurzió az üres lista egyeztetésével ér véget. Ekkor az érték head nem található, és None a rendszer visszaadja.

Számos F#-kódtárfüggvény, amely egy gyűjteményben keres egy olyan értéket, amely lehet, hogy létezik, vagy nem létezik, a típust option adja vissza. Konvenció szerint ezek a függvények például az try előtaggal kezdődnek Seq.tryFindIndex.

A beállítások akkor is hasznosak lehetnek, ha egy érték nem létezik, például ha lehetséges, hogy kivétel jelenik meg egy érték létrehozásakor. Az alábbi példakód ezt szemlélteti.

open System.IO

let openFile filename =
    try
        let file = File.Open(filename, FileMode.Create)
        Some(file)
    with ex ->
        eprintf "An exception occurred with message %s" ex.Message
        None

Az openFile előző példában szereplő függvény típusa string -> File option azért van, mert egy File objektumot ad vissza, ha a fájl sikeresen megnyílik, és None kivétel történik. A helyzettől függően előfordulhat, hogy nem megfelelő kialakítási választás, ha kivételt észlel ahelyett, hogy lehetővé tenné a propagálást.

Emellett továbbra is átadható null , vagy egy lehetőség esetében null Some értékű érték. Ezt általában kerülni kell, és általában rutin F# programozásban van, de a .NET-ben a referenciatípusok jellege miatt lehetséges.

Beállítás tulajdonságai és metódusai

A beállítástípus a következő tulajdonságokat és metódusokat támogatja.

Tulajdonság vagy metódus Típus Leírás
None 'T option Egy statikus tag, amely létrehoz egy olyan beállításértéket, amely rendelkezik az None értékkel.
IsNone bool Visszaadja true , ha a beállítás értéke van None .
IsSome bool Akkor adja true vissza, ha a beállítás értéke nem None.
Some 'T option Statikus tag, amely olyan beállítást hoz létre, amelynek értéke nem None.
Érték 'T A mögöttes értéket adja vissza, vagy ad egy System.NullReferenceException értéket, ha az érték .None

Beállításmodul

Létezik egy option modul, amely hasznos függvényeket tartalmaz, amelyek műveleteket hajtanak végre a beállításokon. Egyes függvények megismétlik a tulajdonságok funkcióit, de olyan környezetekben hasznosak, ahol szükség van egy függvényre. Az Option.isSome és az Option.isNone egyaránt olyan modulfüggvény, amely ellenőrzi, hogy egy beállítás tartalmaz-e értéket. Az Option.get lekéri az értéket, ha van ilyen. Ha nincs érték, akkor dob System.ArgumentException.

Az Option.bind függvény egy függvényt hajt végre az értéken, ha van érték. A függvénynek pontosan egy argumentumot kell tartalmaznia, a paramétertípusnak pedig a beállítástípusnak kell lennie. A függvény visszatérési értéke egy másik beállítástípus.

A beállításmodul olyan függvényeket is tartalmaz, amelyek a listákhoz, tömbökhöz, sorozatokhoz és más gyűjteménytípusokhoz elérhető függvényeknek felelnek meg. Ezek a függvények a következők: Option.map, Option.iter, Option.forall, Option.exists, Option.foldBackOption.foldés Option.count. Ezek a függvények lehetővé teszik a lehetőségek használatát, például egy nulla vagy egy elemből álló gyűjteményt. További információkért és példákért tekintse meg a listák gyűjteményfüggvényeinek ismertetését.

Átalakítás más típusokká

A beállítások listákká vagy tömbökké alakíthatók. Ha egy lehetőség ezen adatstruktúrák bármelyikére konvertálódik, az eredményül kapott adatstruktúra nulla vagy egy elemből áll. Ha tömbté szeretne konvertálni egy beállítást, használja Option.toArraya következőt: . Ha egy beállítást listává szeretne alakítani, használja Option.toLista következőt: .

Lásd még