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
编译标志标记类型来在您的类型中获得相同的行为。
谁能告诉我为什么这个 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
编译标志标记类型来在您的类型中获得相同的行为。