所以我一直在阅读Apress的Expert F#书,主要是在构建一个玩具式的F#库时使用它作为参考,但有一件事我没有掌握,那就是"选项"类型.
它是如何工作的以及它的真实用途是什么?
Jon*_*eet 20
选项类型是至少相似于Nullable<T>
在C#和引用类型.type的值Option<T>
是None
表示没有封装值或Some
具有特定值的T
.这就像一个的方式Nullable<int>
在C#是任一空值,或具有相关联的int
-和的方式String
在C#值是任一个空引用,或者是指一个字符串对象.
当您使用的期权价值时,通常指定两个路径-一个用于那里的情况是相关的值,一个地方有没有.换句话说,这段代码:
let stringLength (str:Option<string>) =
match str with
| Some(v) -> v.Length
| None -> -1
Run Code Online (Sandbox Code Playgroud)
类似于:
int StringLength(string str)
{
if (str != null)
{
return str.Length;
}
else
{
return -1;
}
}
Run Code Online (Sandbox Code Playgroud)
我相信一般的想法是强迫你(好吧,差不多)处理"没有相关的值/对象"的情况使你的代码更健壮.
实际使用的最佳示例之一是.Net中的TryParse模式.见上半场
http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!181.entry
讨论.