有人可以告诉我为什么这个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
答案 0 :(得分:3)
它的哪一部分令人惊讶,事实是(null, null)
而不是(None, None)
?
这只是打印None
值如何工作的工件。试试fst it
,您就会发现它仍然是一个合适的选项值。
您会看到这一点,因为出于性能原因,None
值被编译为空值,即使在F#中使用它们时(大部分)是透明的。通过使用UseNullAsTrueValue
编译标志标记类型,您可以在类型中获得相同的行为。