在我对学习的探索中,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.
首先,在两个模块之间存在依赖循环(主要取决于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)
| 归档时间: |
|
| 查看次数: |
183 次 |
| 最近记录: |