📅  最后修改于: 2021-01-01 14:29:06             🧑  作者: Mango
这是有用的数据结构。它有助于存储异构数据。联合用于表示树数据结构。它提供案例,每个案例都包含异构数据。如果在任何情况下都不存在值,则该情况等效于枚举情况。
type type-name =
| case-identifier1 [of [ fieldname1 : ] type1 [ * [ fieldname2 : ] type2 ...]
| case-identifier2 [of [fieldname3 : ]type3 [ * [ fieldname4 : ]type4 ...]
...
type Calculate =
| Add of val1 : float * val2 : float
| Square of val1 : int
在上面的代码中,我们有两种情况的矩形和圆形,每种情况都有不同的字段集。现在让我们看看如何为这些情况调用和设置值。
let add = Add(val1 = 1.3, val2 = 10.0)
let square = Square (1)
它允许您在调用时使用字段名,也可以像在Square案例代码中那样传递值。如果使用字段名称,则无需维护字段顺序。仅传递值时,必须在传递值之前确保字段顺序。
type Calcualte =
| Add of val1 : int * val2 : int
| Subtract of val1 : int * val2 : int
| Multiply of val1 : int * val2 : int
let compute vall =
match vall with
| Add (val1, val2) -> val1+val2
| Subtract (val1, val2)->val1-val2
| Multiply (val1, val2)->val1*val2
let addition = compute (Add(10,10))
let subtraction = compute (Subtract(20,10))
let multiplication = compute (Multiply(2,5))
printf "Addition = %d\nSubtraction = %d\nMultiplication = %d" addition subtraction multiplication
输出:
Addition = 20
Subtraction = 10
Multiplication = 10