【问题标题】:F# check if generic type parameter is discriminated unionF#检查泛型类型参数是否被区分联合
【发布时间】:2021-03-11 18:59:33
【问题描述】:

创建约束时如何指定可区分联合的类型?我应该写什么而不是DiscriminatedUnion

let f<'U when 'U :> DiscriminatedUnion> ()

【问题讨论】:

  • 所以'U 可以是any 有区别的联合,但不是记录类型?我不认为这是可能的。这是list of constraints supported by F#。此外,我不明白这个约束会完成什么。换句话说,f 将如何利用'U在编译时是可区分联合这一事实?
  • DU 内部只是一个类,参见decompilation。 DU 和记录都没有任何基类。您可以对 5 个接口进行约束,但 DU 和记录都会匹配它

标签: generics f# discriminated-union


【解决方案1】:

我不相信有任何方法可以在编译时强制执行此检查。在运行时,您可以在实现中使用 FSharpType.IsUnion ref 并可能通过抛出异常来处理错误情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-13
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 2016-07-22
    • 2018-11-24
    相关资源
    最近更新 更多