2

要检查变量a是否具有类型T,我可以使用

if (a :? T)

但是 ifT是一个普遍定义的并且有几个子类型T1,T2,T3我只想检查 if ahas typeT1怎么办?例如:

type Uni = Iu of int
            | Flu of float
            | Su of string
            | Bu of bool
            | Lu of Uni List
            | Fu of (Uni -> Uni)

如何检查变量aString是否具有类型Su

帮助表示赞赏。

4

1 回答 1

6

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

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

尽管您可以将有区别的联合Uni视为具有某些基类和许多子类型的类层次结构,但我认为这在这种情况下不是很有帮助。最好将它们视为可以具有几种可能表示形式之一的类型。Su因此,您实际上只是检查是否使用大小写表示值,而不是“检查子类型” 。

于 2013-09-11T16:09:52.313 回答