Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der Wertoptionstyp in F# wird verwendet, wenn die folgenden beiden Bedingungen enthalten sind:
- Ein Szenario ist für eine F#-Option geeignet.
- Die Verwendung einer Struktur bietet einen Leistungsvorteil in Ihrem Szenario.
Nicht alle leistungsabhängigen Szenarien werden mithilfe von Strukturen "gelöst". Sie müssen die zusätzlichen Kosten für das Kopieren berücksichtigen, wenn Sie diese anstelle von Referenztypen verwenden. Große F#-Programme instanziieren jedoch häufig viele optionale Typen, die durch heiße Pfade fließen, und in solchen Fällen können Strukturen häufig eine bessere Gesamtleistung über die Lebensdauer eines Programms erzielen.
Definition
Die Wertoption ist als strukturdiskriminierte Vereinigung definiert, die dem Referenzoptionstyp ähnelt. Seine Definition kann auf diese Weise betrachtet werden:
[<StructuralEquality; StructuralComparison>]
[<Struct>]
type ValueOption<'T> =
| ValueNone
| ValueSome of 'T
Die Wertoption entspricht der strukturellen Gleichheit und dem Vergleich. Der Hauptunterschied besteht darin, dass der kompilierte Name, der Typname und die Groß-/Kleinschreibung alle angeben, dass es sich um einen Werttyp handelt.
Verwenden von Wertoptionen
Wertoptionen werden wie "Optionen" verwendet.
ValueSome wird verwendet, um anzugeben, dass ein Wert vorhanden ist und ValueNone verwendet wird, wenn kein Wert vorhanden ist:
let tryParseDateTime (s: string) =
match System.DateTime.TryParse(s) with
| (true, dt) -> ValueSome dt
| (false, _) -> ValueNone
let possibleDateString1 = "1990-12-25"
let possibleDateString2 = "This is not a date"
let result1 = tryParseDateTime possibleDateString1
let result2 = tryParseDateTime possibleDateString2
match (result1, result2) with
| ValueSome d1, ValueSome d2 -> printfn "Both are dates!"
| ValueSome d1, ValueNone -> printfn "Only the first is a date!"
| ValueNone, ValueSome d2 -> printfn "Only the second is a date!"
| ValueNone, ValueNone -> printfn "None of them are dates!"
Wie bei "Optionen" lautet die Benennungskonvention für eine Funktion, die zurückgegeben ValueOption wird, dem Präfix vorangestellt try.
Value Option-Eigenschaften und -Methoden
Zurzeit gibt es eine Eigenschaft für Wertoptionen: Value. Ein InvalidOperationException Wird ausgelöst, wenn kein Wert vorhanden ist, wenn diese Eigenschaft aufgerufen wird.
Wertoptionsfunktionen
Das ValueOption Modul in FSharp.Core enthält die entsprechende Funktionalität für das Option Modul. Es gibt einige Unterschiede im Namen, z defaultValueArg. B. :
val defaultValueArg : arg:'T voption -> defaultValue:'T -> 'T
Dies verhält sich genauso wie defaultArg im Option Modul, funktioniert aber stattdessen mit einer Wertoption.