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

use*_*438 2 f#

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

感谢帮助.

Tom*_*cek 6

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

let isSu = function Su _ -> true | _ -> false
Run Code Online (Sandbox Code Playgroud)

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