如何访问传递给OCaml中另一个文件中的函数的记录类型元素?

Tur*_*Man 0 ocaml

在我对学习的探索中,OCaml我不了解如何访问存储在传递给另一个文件中的函数的记录类型中的值.

我目前的代码:

main.ml 文件

(* Declaring a token record type*)
type 'a tokens = { 
                   error_tok : 'a;
                   id_tok    : 'a;          
                 }

let main_fun () =                   
                let token = { 
                              error_tok = -1;
                              id_tok    =  0;           
                            } in

               let tok = Rdp.rdp token in
                         print_int tok;

;;

main_fun ();
Run Code Online (Sandbox Code Playgroud)

rdp.ml 文件

let rdp token = print_string "In RDP function: \n";                  
                print_int token.error_tok;
                0;
Run Code Online (Sandbox Code Playgroud)

我正在编译使用ocamlbuild main.native并获得编译错误Unbound record field error_tok.我如何访问存储token.error_tok在我rdp.ml文件中的传入记录类型中的值.

本质上,我试图将记录类型视为一种enum.

Éti*_*lon 5

首先,在两个模块之间存在依赖循环(主要取决于Rdp用于rdp函数,Rdp取决于Main用于类型).一个简单的解决方案是将token类型移动到Rdp.这会将类型错误移动到您编译main.ml时,因为它在声明时不会知道字段token.

然后,有3种方法可以将记录类型(和字段)放在范围内:

开放(本地或全球)

let main_fun () =
  let open Rdp in
  let token = {
    error_tok = -1;
    id_tok    =  0;
  }
in
(* ... *)
Run Code Online (Sandbox Code Playgroud)

鉴定一个领域

let main_fun () =
  let token = {
    Rdp.error_tok = -1;
    id_tok = 0;
  }
in
(* ... *)
Run Code Online (Sandbox Code Playgroud)

注释记录值

let main_fun () =
  let token : int Rdp.t = { (* or just : _ Rdp.t *)
    error_tok = -1;
    id_tok    =  0;
  }
in
(* ... *)
Run Code Online (Sandbox Code Playgroud)