【F#学习】可区分联合 Discriminated Unions

可区分联合是一串固定的项目。使用type| 来声明。将每一个项目称为一个case

type Season =
    | Spring  // Spring 就是一个 case
    | Summer
    | Autumn
    | Winter

可区分联合的每一个case都可以附加一些数据,不同的case可以附加不同类型的数据。当然,如果每一个case都没有附加数据,那这个可区分联合其实就和C#中的枚举enum区别不大了。

type Number =
    | Integer of int
    | Float of float
    | Invalid

为了创建一个可区分联合的实例,直接引用该case的名称即可。但是当两个可区分联合中出现了相同的项目的时候,需要使用全称。

type Number =
    | Integer of int
    | Float of float
    | Invalid

type Result =
    | Message of string
    | ErrorCode of int
    | Invalid

let byShortName = Integer 2
let byFullName = Number.Invalid

可区分联合可以判断是否相等。当且仅当二者是相同的case且具有相同的附带值的时候,二者相等。

你可以使用if/elif/else来判断,不过更推荐的方法是使用模式匹配。

let describe number =
    match number with
    | Integer i -> sprintf "Integer: %d" i
    | Float d  -> sprintf "Float: %f" d
    | Invalid   -> "Invalid"
posted @ 2025-09-23 09:55  QMazon  阅读(13)  评论(0)    收藏  举报