我正在寻找获取F#选项值的方法,或者如果它是None,则使用默认值。 这似乎很常见,我无法相信预定义的东西不存在。我现在就是这样做的:
// val getOptionValue : Lazy<'a> -> Option<'a> -> 'a
let getOptionValue (defaultValue : Lazy<_>) = function Some value -> value | None -> defaultValue.Force ()
我(某种程度上)正在寻找与C#相当的F#??操作者:
string test = GetString() ?? "This will be used if the result of GetString() is null.";
Option模块中的任何功能都没有我认为是一项非常基本的任务。我错过了什么?
答案 0 :(得分:35)
您正在寻找defaultArg
[MSDN]('T option -> 'T -> 'T
)。
它通常用于为可选参数提供默认值:
type T(?arg) =
member val Arg = defaultArg arg 0
let t1 = T(1)
let t2 = T() //t2.Arg is 0
答案 1 :(得分:14)
您可以轻松创建自己的运算符来执行相同的操作。
let (|?) = defaultArg
您的C#示例将成为
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."
Here's a blog post更详细一点。
编辑:Nikon the Third为操作员提供了更好的实现,因此我对其进行了更新。