0

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

有没有办法在 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
4

2 回答 2

2

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

为了对原语进行类型检查,您能做的最好的事情就是将其预处理为类似

#install_printer some_function

let _ = (some_function:Format.formatter -> 'a -> unit)

于 2015-12-28T17:45:19.050 回答
2

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

它通常看起来像这样:

#使用“顶部查找”;;
#要求“这个”;;
#要求“那个”;;

让_printer = ...;;
#install_printer _printer;;
...

在相关说明中,如果环境变量OCAMLPATH设置为/path/to/my/project:...,并且 中有适当的META文件/path/to/my/project/foo,则可以foo使用#require "foo".

于 2015-12-28T22:54:12.880 回答