我正在阅读定义了大量记录的OCaml代码。这些记录定义了交互式命令行工具的功能。
这些记录的类型是:
{
name : string ;
help : string ;
run : string list -> unit
}
其中name
是命令的名称,help
是函数的一小部分帮助,run
是一个接受参数并计算结果的函数。
我想使用name
函数中的run
字段。有没有办法做到这一点?有点像self.name
?
该工具必须支持OCaml>4.00.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);
}