Compartir a través de


Opciones de valores

El tipo de opción de valor de F# se usa cuando se mantienen las dos circunstancias siguientes:

  1. Un escenario es adecuado para una opción de F#.
  2. El uso de una estructura proporciona una ventaja de rendimiento en su escenario.

No todos los escenarios sensibles al rendimiento se "resuelven" mediante estructuras. Debe tener en cuenta el costo adicional de copia al usarlos en lugar de tipos de referencia. Sin embargo, los programas de F# de gran tamaño suelen crear instancias de muchos tipos opcionales que fluyen a través de rutas de acceso activas y, en tales casos, las estructuras a menudo pueden producir un mejor rendimiento general durante la vigencia de un programa.

Definición

Value Option se define como una unión discriminada por estructura similar al tipo de opción de referencia. Su definición puede considerarse de esta manera:

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

Value Option se ajusta a la igualdad estructural y la comparación. La principal diferencia es que el nombre compilado, el nombre de tipo y los nombres de mayúsculas y minúsculas indican que es un tipo de valor.

Uso de opciones de valor

Las opciones de valor se usan igual que las opciones. ValueSome se usa para indicar que hay un valor presente y ValueNone se usa cuando un valor no está presente:

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

Al igual que con Opciones, la convención de nomenclatura de una función que devuelve ValueOption es prefijarla con try.

Propiedades y métodos de value Option

Hay una propiedad para Las opciones de valor en este momento: Value. InvalidOperationException Si no hay ningún valor presente cuando se invoca esta propiedad.

Funciones de opción de valor

El ValueOption módulo de FSharp.Core contiene una funcionalidad equivalente al Option módulo. Hay algunas diferencias en el nombre, como defaultValueArg:

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

Esto actúa igual defaultArg que en el Option módulo, pero funciona en una opción de valor en su lugar.

Consulte también