OCaml记录访问自身

时间:2015-06-12 19:17:29

标签: ocaml record

我正在阅读定义了大量记录的OCaml代码。这些记录定义了交互式命令行工具的功能。

这些记录的类型是:

{
  name : string ;
  help : string ;
  run : string list -> unit
}

其中name是命令的名称,help是函数的一小部分帮助,run是一个接受参数并计算结果的函数。

我想使用name函数中的run字段。有没有办法做到这一点?有点像self.name

该工具必须支持OCaml>4.00.1

由于

1 个答案:

答案 0 :(得分:4)

是的,您可以使用rec关键字递归地定义记录,只要保证所有字段都不涉及任意计算即可。以下作品:

type t = {
  name : string;
  help : string ;
  run : string list -> unit
}

let run x l =
  print_endline x.name

let rec x = {
  name = "a";
  help = "b";
  run = (fun l -> run x l);
}

然而,这不起作用:

let rec x = {
  name = "a";
  help = "b";
  run = (run x);
}