Ocaml 在ml文件中嵌入顶级指令

Ocaml 在ml文件中嵌入顶级指令,ocaml,utop,Ocaml,Utop,我可能用错误的方式思考顶层。作为项目的一部分,维护顶级指令集合的首选方法是什么 有没有办法在OCaml源文件中包含顶级指令,如#install_printer,以便在编译程序时忽略它们,但在运行时由顶级指令执行 理想情况下,我还希望在编译程序时对指令进行类型检查,即使忽略了指令本身,例如 type 'a with_infinity = Finite of 'a | Infinite let print_int_with_infinity pp item = (match item with

我可能用错误的方式思考顶层。作为项目的一部分,维护顶级指令集合的首选方法是什么

有没有办法在OCaml源文件中包含顶级指令,如
#install_printer
,以便在编译程序时忽略它们,但在运行时由顶级指令执行

理想情况下,我还希望在编译程序时对指令进行类型检查,即使忽略了指令本身,例如

type 'a with_infinity = Finite of 'a | Infinite

let print_int_with_infinity pp item =
(match item with
    | Infinite -> Format.pp_print_string pp "Infinite"
    | Finite i -> Format.pp_print_int pp i)

(* install printer cannot occur in this context *)
#install_printer print_int_with_infinity

没有预定义的方法可以做到这一点,但是可以让预处理器在编译时删除该指令

对于原语的类型检查,最好是将其预处理为

#安装打印机的一些功能


let=(一些函数:Format.formatter->'a->unit)

没有预定义的方法可以做到这一点,但是可以让预处理器在编译时删除该指令

对于原语的类型检查,最好是将其预处理为

#安装打印机的一些功能


let.=(一些函数:Format.formatter->'a->unit)

使用顶层的一个好方法是在项目的根目录下有一个
.ocamlinit
文件。当您从同一目录启动
utop
ocaml
时,将加载此文件

它通常如下所示:

#use "topfind";; #require "this";; #require "that";; let _printer = ...;; #install_printer _printer;; ... #使用“topfind”;; #要求“这个”;; #要求“那个”;; 让_printer=。。。;; #安装打印机;; ...
另一方面,如果环境变量
OCAMLPATH
被设置为
/path/to/my/project:…
,并且
/path/to/my/project/foo
中有一个适当的
META
文件,则可以使用
\require“foo”加载项目本地
foo
库及其依赖项

使用顶级的一个好方法是在项目的根目录下有一个
.ocamlinit
文件。当您从同一目录启动
utop
ocaml
时,将加载此文件

它通常如下所示:

#use "topfind";; #require "this";; #require "that";; let _printer = ...;; #install_printer _printer;; ... #使用“topfind”;; #要求“这个”;; #要求“那个”;; 让_printer=。。。;; #安装打印机;; ...
另一方面,如果环境变量
OCAMLPATH
被设置为
/path/to/my/project:…
,并且
/path/to/my/project/foo
中有一个适当的
META
文件,则可以使用
\require“foo”加载项目本地
foo
库及其依赖项

像往常一样,你的建议非常有价值,马丁,这应该是公认的答案!
.ocamlint
文件是否可以源于其他
.ocamlint
文件?@GregoryNisbet如果在子文件夹中找到的
.ocamlint
文件是自动源于源的,这可能会很有用,但不是它的工作方式。需要解决的问题包括加载这些文件的顺序以及发生错误时的处理方法。同时,您可以在
.ocamlinit
中编写一系列明确的
#use
。您的建议与往常一样非常有价值,Martin,这应该是公认的答案!
.ocamlint
文件是否可以源于其他
.ocamlint
文件?@GregoryNisbet如果在子文件夹中找到的
.ocamlint
文件是自动源于源的,这可能会很有用,但不是它的工作方式。需要解决的问题包括加载这些文件的顺序以及发生错误时的处理方法。同时,您可以在
.ocamlinit
中编写一系列显式
#use