变体
变体对结构是双重的。而结构表示“这个、那个和其他”,而变量则表示“这个或那个或其他”,换句话说,是替代品。
定义
我们已经遇到了一个常见的变体,选项类型:
variant opt[t] =
| None
| Some of t
;
名字 None 和 Some 有时被称为 类型构造函数 . 当它们用于生成变量类型的值时,它们是函数,称为 注入函数 因为它们将参数注入变量类型。
施工
下面是如何生成选项类型的值:
var n = None[int];
var s = Some 42;
注意,对于 None 我们必须提供实例类型 t 在这种情况下 int . 对于 Some 案例,实例 int 属于 t 是由过载分辨率推导出来的,因此可以省去。
提取
注入是条件可逆的,也就是说,逆函数就是我所说的偏函数 提取器 . 可以将这些用于模式匹配:
fun show (x:opt[int]) =>
match x with
| None => "None"
| Some i => "Some(" + i.str + ")"
;
Felix“知道”哪个注入用于构造变量值,并从 match 表达式。这样可以确保提取器定义良好。对于 Some branch,提取集 i 用于构造值的注入函数的参数。