Értékbeállítások
Az F# értékbeállítás-típusa akkor használatos, ha a következő két körülmény fennáll:
- Az F#-beállításhoz megfelelő forgatókönyv.
- A szerkezet használata teljesítménybeli előnyt biztosít a forgatókönyvben.
Nem minden teljesítményfüggő forgatókönyvet "oldunk meg" a szerkezetek használatával. A hivatkozástípusok helyett a másolás további költségeit is figyelembe kell vennie. A nagy F#-programok azonban gyakran számos választható típust hoznak létre, amelyek gyakori útvonalakon haladnak át, és ilyen esetekben a szerkezetek gyakran jobb általános teljesítményt eredményeznek a program élettartama során.
Definíció
Az Érték beállítás a hivatkozási beállítás típusához hasonló struct diszkriminált egyesítésként van definiálva. Definíciója így képzelhető el:
[<StructuralEquality; StructuralComparison>]
[<Struct>]
type ValueOption<'T> =
| ValueNone
| ValueSome of 'T
Az Érték beállítás megfelel a strukturális egyenlőségnek és az összehasonlításnak. A fő különbség az, hogy a lefordított név, a típusnév és a kis- és nagybetűk mind azt jelzik, hogy értéktípus.
Értékbeállítások használata
Az értékbeállítások ugyanúgy használhatók, mint a Beállítások. ValueSome
a rendszer azt jelzi, hogy egy érték jelen van, és ValueNone
akkor használatos, ha egy érték nincs jelen:
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!"
A Beállításokhoz hasonlóan a visszaadott függvények elnevezési konvenciója ValueOption
az előtagja.try
Értékbeállítás tulajdonságai és metódusai
Az Értékbeállításoknak jelenleg egy tulajdonsága van: Value
. A InvalidOperationException függvény akkor keletkezik, ha a tulajdonság meghívásakor nincs érték.
Értékbeállítási függvények
Az ValueOption
FSharp.Core modulja a modulnak Option
megfelelő funkciókat tartalmaz. Van néhány különbség a névben, például defaultValueArg
:
val defaultValueArg : arg:'T voption -> defaultValue:'T -> 'T
Ez ugyanúgy működik, mint defaultArg
a Option
modulban, de ehelyett egy Érték beállításon működik.