Caml Light manual在第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建议使用引用,这是可变记录的快捷方式:
type foo = A of int ref
| B of int ref * int ref
答案 0 :(得分:3)
实际上,在Caml Light和OCaml之间的转换中删除了可变变体,部分原因是操纵它们的语法非常笨拙(在可变字段上的模式匹配会使模式标识符成为左值,yumm ...)
当前表达可变性的方法是通过可变记录字段(具有适当的字段变异语法)或引用int ref
(定义为单字段可变记录)。
答案 1 :(得分:2)
您可以使用refs作为速记。
的2.2可变存储和副作用