Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El tipo de opción de valor de F# se usa cuando se mantienen las dos circunstancias siguientes:
- Un escenario es adecuado para una opción de F#.
- 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.