2

Caml Light 手册在第 37 页提到了可变变体类型:

type foo = A of mutable int
         | B of mutable int * int

但是这个扩展似乎不是 OCaml 的一部分,或者是吗?在 OCaml 中定义可变变体类型的唯一方法是使用可变记录或数组,我对吗?

(* with records *)
type a = {mutable a: int}
and b = {mutable b1: int; mutable b2: int}
and foo = A of a
        | B of b

(* with arrays *)
type foo = A of int array
         | B of int array

编辑:感谢@gasche 建议使用 refs,这是可变记录的快捷方式:

type foo = A of int ref 
         | B of int ref * int ref
4

2 回答 2

3

事实上,可变变体在 Caml Light 和 OCaml 之间的转换中被删除,部分原因是操作它们的语法非常笨拙(可变字段上的模式匹配会使模式标识符成为左值,yumm...)。

当前表达可变性的方法是通过可变记录字段(具有适当的字段突变语法)或引用int ref(定义为单字段可变记录)。

于 2013-06-28T13:18:33.413 回答
2

您可以使用 refs 作为速记。

检查来自http://caml.inria.fr/pub/docs/u3-ocaml/ocaml-core.html的 2.2 可变存储和副作用

于 2013-06-28T13:19:10.730 回答