【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"