如何为可变变量定义特定类型?

时间:2019-03-11 17:12:14

标签: types ocaml mutable ref

我是OCaml的初学者。我想编译此代码,但出现错误。

type pointeur_de_code = int;;
type environnement = int;;
type mlvalue =
 | Ml1 of int
 | Ml2 of pointeur_de_code * environnement;;
let (accu:mlvalue) = ref 0;;
  

此表达式的类型为int ref,但期望表达式的类型为mlvalue

1 个答案:

答案 0 :(得分:2)

当您定义诸如mlvalue之类的变量类型时,您将为该类型的值定义构造函数。您有一个名为Ml1的构造函数,该构造函数接受一个int并生成一个值。并且您有一个名为Ml2的构造函数,它需要两个int并产生一个值。

要生成该类型的值,您需要包括构造函数。

此外,您的accu的类型不能为mlvalue。它必须是mlvalue ref,这是另一种类型。

let accu : mlvalue ref = ref (Ml1 0)

(请注意,您不需要提供accu的类型。OCaml会为您推断类型。)