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