2

変数aに type があるかどうかを確認するにはT、次を使用できます

if (a :? T)

しかし、が普遍的に定義されていて、 type があるかどうかのチェックだけに関心があるTいくつかのサブタイプがある場合はどうでしょうか? 例えば:T1,T2,T3aT1

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、いくつかの基本クラスといくつかのサブタイプを持つクラス階層のように考えることができますが、この場合、これはあまり役に立ちません。それらは、いくつかの可能な表現の 1 つを持つことができる型と考える方がはるかに適切です。したがって、「サブタイプをチェックする」のではなく、値がSuケースを使用して表現されているかどうかを実際にチェックしているだけです。

于 2013-09-11T16:09:52.313 に答える