Option.None 的 F# 元组评估为空值元组

F# tuple of Option.None evaluates as tuple of null values

谁能告诉我为什么这个 F# 表达式:

(Option<int*int>.None, Option<int*int>.None)

计算为

val it : (int * int) option * (int * int) option = (null, null)

同时

(Option<int*int>.None

简单计算为

val it : (int * int) option = None

哪一部分令人惊讶,它是 (null, null) 而不是 (None, None)

这只是打印 None 值的工作原理。试试 fst it 你会发现它仍然是一个合适的 Option 值。

你看到这个是因为 None 值出于性能原因被编译为 null,即使在 F# 中使用它们时这(大部分)是透明的。您可以通过使用 UseNullAsTrueValue 编译标志标记类型来在您的类型中获得相同的行为。