Možnosti (F#)
Možnost Typ F# při skutečná hodnota pojmenovaná hodnota nebo Proměnná pravděpodobně neexistuje.Možnost Základní typ a může obsahovat hodnotu tohoto typu, nebo není hodnota.
Poznámky
Následující kód znázorňuje použití typu možnosti.
let keepIfPositive (a : int) = if a > 0 then Some(a) else None
Hodnota None při možnost nemá skutečnou hodnotu.V opačném případě se výraz Some( ... ) nabídne možnost hodnota.Hodnoty Some a None jsou užitečné pro porovnávání, jako v následující funkce exists, která vrátí true -li možnost Hodnota a false Pokud neexistuje.
let exists (x : int option) =
match x with
| Some(x) -> true
| None -> false
Pomocí možnosti
Možnosti jsou obvykle používány při hledání nevrací odpovídající výsledek, jak je ukázáno v následujícím kódu.
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 ]
V předchozím kódu je seznam prohledávaných rekurzivně.Funkce tryFindMatch trvá predikátu funkce pred , vrátí logickou hodnotu a seznam hledání.Pokud je nalezen prvek, který splňuje predikátu, končí rekurze a funkce vrátí hodnotu jako možnost ve výrazu Some(head).Rekurze končí, když je prázdný seznam shodný.V daném okamžiku hodnotu head nebyl nalezen, a None je vrácena.
Mnoho F# Knihovna funkcí, které hledání kolekce hodnotu, která může nebo nemusí existovat návrat option typu.Dle úmluvy těchto funkcí začínají try před, například Seq.tryFindIndex.
Volby může být užitečná také při hodnotu pravděpodobně neexistuje, například pokud je možné, že při pokusu vytvořit hodnotu bude vyvolána výjimka.Následující příklad kódu ukazuje to.
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
openFile Funkce v předchozím příkladu je typu string -> File option protože vrátí File objektu, pokud soubor úspěšně otevřen a None dojde k výjimce.V závislosti na situaci nemusí být volbu k příslušné návrhové zachytit výjimku, nikoli jeho šíření.
Možnost Vlastnosti a metody
Typ možnosti podporuje následující vlastnosti a metody.
Vlastnost nebo metoda |
Type |
Description |
---|---|---|
'T option |
Statická vlastnost, která umožňuje vytvořit možnost Hodnota, kterou má None hodnotu. |
|
bool |
Vrátí true má možnost None hodnotu. |
|
bool |
Vrátí true -li možnost Hodnota, která není None. |
|
'T option |
Statický člen, vytvářející možnost má hodnotu, která není None. |
|
'T |
Vrátí hodnotu základní nebo vyvolá NullReferenceException Pokud je hodnota None. |
Možnosti modulu
Je-li modul možnost, který obsahuje užitečné funkce, které provádějí operace v možnosti.Některé funkce opakovat funkce vlastnosti, ale jsou užitečné v souvislostech, kde je zapotřebí funkce.Option.isSome a Option.isNone jsou obě funkce modulu, které otestovat, zda je možnost obsahuje hodnotu.Option.Get získá hodnotu, pokud existuje.Pokud není žádná hodnota, vyvolá ArgumentException.
Option.bind funkce vykonává funkci na hodnotu, pokud je hodnota.Funkce musí trvat přesně jeden argument a její typ parametru musí být typu možnosti.Vrácená hodnota funkce je jiného typu možnosti.
Modul možnost také obsahuje funkce, které odpovídají funkce, které jsou k dispozici seznamy, pole, sekvence a další typy kolekce.Tyto funkce zahrnují Option.map, Option.iter, Option.forall, Option.exists, Option.foldBack, Option.fold, a Option.count.Tyto funkce povolit možnosti použít jako kolekci prvků, žádná nebo jedna.Další informace a příklady viz diskuse v kolekci funkce seznam.
Převod na jiné typy
Možnosti lze převést do seznamů nebo polí.Při možnost na některý z těchto datových struktur, Výsledná struktura dat má nula nebo jeden prvek.Použijte volbu Převést na matici, Option.toArray.Možnost převést na seznam, použijte Option.toList.