将 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
值可以安全使用。