可扩展变体
变体类型通常被限制于一组构造器的固定集合。在极少数情况下,你可能想在初始化类型声明后给变体类型添加构造器。为此,我们提供了可扩展变体(Extensible Variant)类型。
定义与使用
在上面的类型声明中我们用 ..
定义了一个可扩展变体 type t
。然后用 +=
操作符为类型添加构造器。
注意:在使用 +=
操作符时,不要忘记开头的 type
关键字。
模式匹配注意事项
可扩展变体是可开放式的,所以编译器无法穷尽所有可能的模式匹配情况。你总是需要为 switch
表达式提供一个默认的 _
。
技巧和诀窍
有趣的事实:在 ReScript 中,异常 实际上是可扩展变体实现的,因此 exception UserError(string)
与 type exn += UserError(string)
等价。这是极少数可扩展变体的有意义的用例之一。
我们通常建议尽可能使用普通变体,以获得无遗漏的模式匹配的好处。