共用方式為


值選項

當下列兩種情況保留時,會使用 F# 中的 Value Option 類型:

  1. 案例適用於 F# 選項
  2. 使用結構可在您的案例中提供效能優勢。

並非所有區分效能的案例都會使用 結構來「解決」。 使用它們時,您必須考慮複製的額外成本,而不是參考型別。 不過,大型 F# 程式通常會具現化許多可流經經常性路徑的選擇性類型,在這種情況下,結構通常會在程式的存留期內產生更佳的整體效能。

定義

Value Option 定義為結構 歧視聯集 ,類似於參考選項類型。 其定義可以這樣想:

[<StructuralEquality; StructuralComparison>]
[<Struct>]
type ValueOption<'T> =
    | ValueNone
    | ValueSome of 'T

Value Option 符合結構相等和比較。 主要差異在於編譯的名稱、類型名稱和大小寫名稱全都表示它是實值型別。

使用值選項

值選項會與 Options 一樣使用。 ValueSome 是用來指出值存在,且 ValueNone 當值不存在時會使用:

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!"

Options一樣,傳回 ValueOption 之函式的命名慣例是以 作為前置詞 try

Value Option 屬性和方法

目前[值選項] 有一個屬性: ValueInvalidOperationException如果叫用這個屬性時沒有值,就會引發 。

值選項函式

ValueOption FSharp.Core 中的模組包含與模組相等的功能Option。 名稱有一些差異,例如 defaultValueArg

val defaultValueArg : arg:'T voption -> defaultValue:'T -> 'T

這就像在模組中Option一樣defaultArg,但會改用值選項。

另請參閱