Option.None的F#元组计算为空值的元组

时间:2015-02-15 16:00:29

标签: .net f#

有人可以告诉我为什么这个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

1 个答案:

答案 0 :(得分:3)

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

这只是打印None值如何工作的工件。试试fst it,您就会发现它仍然是一个合适的选项值。

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