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


É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:

  1. Az F#-beállításhoz megfelelő forgatókönyv.
  2. 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.

Lásd még