f# option

F#Opción equivalente de C#''s? operador



option (2)

Está buscando defaultArg [MSDN] ( ''T option -> ''T -> ''T ).

A menudo se usa para proporcionar un valor predeterminado para argumentos opcionales:

type T(?arg) = member val Arg = defaultArg arg 0 let t1 = T(1) let t2 = T() //t2.Arg is 0

Estoy buscando una manera de obtener el valor de una opción F # o usar un valor predeterminado si es Ninguno. Esto parece tan común que no puedo creer que algo predefinido no exista. Así es como lo hago ahora mismo:

// val getOptionValue : Lazy<''a> -> Option<''a> -> ''a let getOptionValue (defaultValue : Lazy<_>) = function Some value -> value | None -> defaultValue.Force ()

Estoy (más o menos) buscando el equivalente de F # del C #? operador:

string test = GetString() ?? "This will be used if the result of GetString() is null.";

Ninguna función en el módulo Opcional hace lo que creo que es una tarea bastante básica. ¿Qué me estoy perdiendo?


Podrías crear fácilmente tu propio operador para hacer lo mismo.

let (|?) = defaultArg

Tu ejemplo de C # se convertiría entonces en

let getString() = (None:string option) let test = getString() |? "This will be used if the result of getString() is None.";; val getString : unit -> string option val test : string = "This will be used if the result of getString() is None."

Aquí hay una entrada de blog que entra en un poco más de detalle.

Edit: Nikon the Third tenía una implementación mucho mejor para el operador, así que la actualicé.