学习路径
/
F#
F#
/
教学大纲
/
可区分联合
可区

可区分联合 属于 F#

15 个练习

关于 可区分联合

可区分联合类型表示固定数量的命名情形。可区分联合的每个值都恰好对应其中一个命名情形。这类数据类型称为_和类型_。

可区分联合的每个情形都可以选择性地关联数据,而且不同情形可以关联不同类型的数据。如果所有情形都没有关联数据,那么可区分联合就类似于其他语言通常所说的_枚举_(或 enum)。

可区分联合使用 type 关键字定义,所需语法非常少。这让它们易于使用,你会发现在很多地方都用到了它们,包括基础库。

// Discriminated union without associated data
type Season =
    | Spring
    | Summer
    | Autumn
    | Winter

// Discriminated union with associated data
type Number =
    | Integer of int
    | Float of float
    | Invalid

要创建某个具体情形的值,可以引用它的名称;如果名称不唯一,就引用它的完整名称。由于情形名称本质上就是构造函数,关联数据可以像普通的函数实参一样传入。

let byName = Integer 2
let byFullName = Number.Invalid

可区分联合具有_结构相等性_,也就是说,同一情形且(可选)数据相同的两个值是等价的。

处理可区分联合的首选方式,是通过模式匹配配合标识符模式来实现:

let describe number =
    match number with
    | Integer i -> sprintf "Integer: %d" i
    | Float d  -> sprintf "Float: %f" d
    | Invalid   -> "Invalid"
通过 GitHub 编辑 该链接会在新窗口或标签页中打开

学习 可区分联合

练习已锁定

再解锁 10 个练习即可练习 可区分联合