Параметры значений

Тип параметра "Значение" в F# используется при следующих двух обстоятельствах:

  1. Сценарий подходит для параметра F#.
  2. Использование структуры обеспечивает преимущество производительности в вашем сценарии.

Не все сценарии с учетом производительности решаются с помощью структур. Необходимо учитывать дополнительные затраты на копирование при их использовании вместо ссылочных типов. Однако большие программы F# обычно создает экземпляры многих необязательных типов, которые проходят через горячие пути, и в таких случаях структуры часто могут повысить общую производительность в течение всего времени существования программы.

Определение

Параметр значения определяется как различающееся объединение структуры, аналогичное типу ссылочного параметра. Его определение можно рассматривать следующим образом:

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

Параметр значения соответствует структурному равенству и сравнению. Основное различие заключается в том, что скомпилированное имя, имя типа и имена регистров указывают на то, что это тип значения.

Использование параметров значения

Параметры значений используются так же, как параметры. 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!"

Как и в случае с параметрами, соглашение об именовании для функции, возвращающейсяValueOption, заключается в префиксе.try

Свойства и методы параметра value

В настоящее время существует одно свойство для параметров значения: Value Вызывается InvalidOperationException , если значение отсутствует при вызове этого свойства.

Функции параметра значения

Модуль ValueOption в FSharp.Core содержит эквивалентные Option функциональные возможности модуля. Существует несколько различий в имени, таких как defaultValueArg:

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

Это действует так же, как defaultArg и в модуле Option , но работает с параметром "Значение".

См. также