Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics F#检查泛型类型参数是否有区别_Generics_F#_Discriminated Union - Fatal编程技术网

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和记录都将匹配它