有人可以告诉我为什么这个 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
,您会发现它仍然是一个正确的选项值。
您会看到这一点,因为出于性能原因,None
值被编译为 null,即使在 F# 中使用它们时(大部分)这是透明的。通过使用 UseNullAsTrueValue
标记类型,您可以在类型中获得相同的行为。编译标志。
关于.net - F# Option.None 元组计算为空值元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28527979/