Fsharp 类中的空字段

fsharp设计之初就尽可能的避免使用null。在我的编程经验中null真是个错误之源,垃圾代码之源,95%的系统奔溃之源。其实在设计之初就应该考虑你的系统需要null表现什么?是未初始化的状态,还是一个未知状态,或者就是一个空状态。这些歧义性造成一个值可能被随心所欲的误用。所以如果没有强有力的约束还是尽可能的少用为妙。

但fsharp还需要和别的系统进行交互,也必不可少需要与null值进行交互。这里有个原则就是尽可能不要产生null,简单的使用null。对于API传过来的null,判断一下就是了。

还有一种情况就是类中字段如何赋一个初值。在有一些情况下在构造函数调用时,我们可能还不能确定这些值。首先应考虑使用option,因为None对应的含义更明显。如果还是希望以null的形式提供类字段。可以这么写

let mutable x = Unchecked.defaultof<FileSystemWatcher>
x <- new FileSystemWatcher()

使用option

let temp = ref None
// Code that may call: temp := Some(foo())
match !temp with 
| None -> bar(arg)
| Some(temp) -> temp

 

posted @ 2017-06-07 22:23  rigid  阅读(343)  评论(0编辑  收藏  举报