可区分联合是一串固定的项目。使用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| Invalidtype Result =| Message of string| ErrorCode of int| Invalidlet 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"