【发布时间】:2014-02-07 07:04:49
【问题描述】:
在与 C# 库交互时,我发现自己需要 C# 的空合并运算符,用于 Nullable 结构和引用类型。
是否可以在 F# 中使用一个内联适当的 if 大小写的重载运算符来近似这一点?
【问题讨论】:
-
不错的文章,还包括选项合并:troykershaw.com/blog/…
-
@Giles 该博文大多已过时,它仅包括选项合并,其行为在 f# 中更简洁地表达为
let (|?) = defaultArg -
我还没有测试过,但文章确实建议使用
let inline (|??) (a: 'a Nullable) b = if a.HasValue then a.Value else b形式的空合并替换。我是 F# 的新手,所以我可能错了,但您的建议(可能带有参数?)不会导致始终使用默认值吗? -
不,
defaultArg是一个内置函数,它的工作原理究竟如何|?在博客文章中进行了描述。您描述的可空版本具有仅使用 Nullable 结构而不是任何可能具有空值的类型的严重限制。但是这个问题是针对适用于 Options 或 Nullables 或其他变体的单个运算符,而不是 |?、|??、|???或添加另一个?对于每个略有不同的单子。只需一个合并运算符即可。 -
啊,我明白了 (msdn.microsoft.com/en-us/library/ee340463.aspx)。感谢您的澄清。
标签: f# null null-coalescing-operator null-coalescing