将 OptionT 与空值一起使用
在函数式编程语言中,如 F# null 值被认为是潜在有害和差的风格(非惯用)。
考虑一下这个 C# 代码:
string x = SomeFunction ();
int l = x.Length;
如果 x 是 null,x.Length 会抛出让我们添加保护:
string x = SomeFunction ();
int l = x != null ? x.Length : 0;
要么:
string x = SomeFunction () ?? "";
int l = x.Length;
要么:
string x = SomeFunction ();
int l = x?.Length;
在惯用 F# null 值没有使用所以我们的代码如下所示:
let x = SomeFunction ()
let l = x.Length
但是,有时需要表示空值或无效值。然后我们可以使用 Option<'T>:
let SomeFunction () : string option = ...
SomeFunction 要么返回 Some string 值,要么返回 None。我们使用模式匹配来提取 string 值
let v =
match SomeFunction () with
| Some x -> x.Length
| None -> 0
这段代码比以下更脆弱的原因是:
string x = SomeFunction ();
int l = x.Length;
是因为我们不能在 string option 上叫 Length。我们需要使用模式匹配来提取 string 值,并且通过这样做我们保证 string 值可以安全使用。