Sdílet prostřednictvím


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

Žádná

'T option

Statická vlastnost, která umožňuje vytvořit možnost Hodnota, kterou má None hodnotu.

IsNone

bool

Vrátí true má možnost None hodnotu.

IsSome

bool

Vrátí true -li možnost Hodnota, která není None.

Některé

'T option

Statický člen, vytvářející možnost má hodnotu, která není None.

Value

'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.

Viz také

Další zdroje

Referenční dokumentace jazyka F#

Typy F#