Generics F#检查泛型类型参数是否有区别
创建约束时,如何指定区分的并集类型?我应该写什么而不是Generics F#检查泛型类型参数是否有区别,generics,f#,discriminated-union,Generics,F#,Discriminated Union,创建约束时,如何指定区分的并集类型?我应该写什么而不是DiscriminatedUnion let f<'U when 'U :> DiscriminatedUnion> () 让f DiscriminatedUnion>() 我认为没有任何方法可以在编译时强制执行此检查。在运行时,您可以在实现中使用FSharpType.IsUnion,并可能通过抛出异常来处理错误情况。那么'U可以是任何有区别的联合,但不能是记录类型?我认为这是不可能的。这是一个例子。此外,我不明白这个约束
DiscriminatedUnion
let f<'U when 'U :> DiscriminatedUnion> ()
让f DiscriminatedUnion>()
我认为没有任何方法可以在编译时强制执行此检查。在运行时,您可以在实现中使用FSharpType.IsUnion
,并可能通过抛出异常来处理错误情况。那么'U
可以是任何有区别的联合,但不能是记录类型?我认为这是不可能的。这是一个例子。此外,我不明白这个约束将实现什么。换句话说,f
如何利用'U
在编译时是一个有区别的并集这一事实?DU内部只是一个类,请参见。DU和records没有任何基类。您可以对5个接口进行约束,但DU和记录都将匹配它