要检查变量a
是否具有T
类型,我可以使用
if (a :? T)
但是,如果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)
如何检查变量aString
是否具有Su
类型?
非常感谢帮助。
答案 0 :(得分:6)
您可以使用带下划线(通配符)模式的模式匹配来忽略float
值:
let isSu = function Su _ -> true | _ -> false
虽然您可以将像Uni
这样的受歧视的联合视为具有一些基类和一些子类型的类层次结构,但我不认为这在这种情况下非常有用。将它们视为可以具有几种可能表示形式之一的类型要好得多。因此,您只需检查是否使用Su
案例表示值,而不是“检查子类型”。