【问题标题】:F# member overload with generic constraints具有泛型约束的 F# 成员重载
【发布时间】:2014-12-10 04:04:45
【问题描述】:

是否可以使用泛型约束进行成员重载?在这里,我试图创建和AddWithOption 方法来支持值类型和引用类型。如果您查看the gist,我会展示一些实现这一目标的尝试。

我的解决方法是不让成员超载。我用一个值类型重命名为AddWithOptionValue。但是,如果过载有效,那就太酷了。有任何想法吗?

【问题讨论】:

  • 也不是最好的代码示例。更好的实现是:member x.AddWithOption (nm, op:Option<_>) = if op.IsSome then x.AddWithValue (nm, op.Value) else x.AddWithValue (nm, DBNull.Value)

标签: f#


【解决方案1】:

约束不是方法签名的一部分(根据 ECMA 335,I.8.6.1.5 方法签名),这意味着在 CIL 中您不能有两个签名仅在约束方面不同的方法。为了在 CIL 中对此类签名进行编码,需要使用可选或必需的修饰符,但这不是很简单,今天 F# 不这样做。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
  • 2016-11-13
  • 2018-02-26
  • 1970-01-01
相关资源
最近更新 更多