OCaml 记录访问自身

OCaml record accessing itself

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

这些记录的类型是:

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

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

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

这样的东西

该工具必须支持 OCaml>4.00.1

谢谢

是的,可以用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);
}