F#检查变量是否属于子类型

时间:2013-09-11 16:01:36

标签: f#

要检查变量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类型?

非常感谢帮助。

1 个答案:

答案 0 :(得分:6)

您可以使用带下划线(通配符)模式的模式匹配来忽略float值:

let isSu = function Su _ -> true | _ -> false

虽然您可以将像Uni这样的受歧视的联合视为具有一些基类和一些子类型的类层次结构,但我不认为这在这种情况下非常有用。将它们视为可以具有几种可能表示形式之一的类型要好得多。因此,您只需检查是否使用Su案例表示值,而不是“检查子类型”。