要检查变量a是否有类型T,我可以使用
if (a :? T)
Run Code Online (Sandbox Code Playgroud)
但是,如果T是一个普遍定义的并且有几个子类型T1,T2,T3,我只关心它是否a有类型T1?例如:
type Uni = Iu of int
| Flu of float
| Su of string
| Bu of bool
| Lu of Uni List
| Fu of (Uni -> Uni)
Run Code Online (Sandbox Code Playgroud)
如何检查变量aString是否具有类型Su?
感谢帮助.
您可以使用带有下划线(通配符)模式的模式匹配来忽略该float值:
let isSu = function Su _ -> true | _ -> false
Run Code Online (Sandbox Code Playgroud)
虽然您可以将受歧视的联合Uni视为具有某些基类和多个子类型的类层次结构,但我不认为这在这种情况下非常有用.将它们视为可以具有几种可能表示形式之一的类型要好得多.因此,您只需检查是否使用Su大小写表示值,而不是"检查子类型" .