ocaml不会在脚本模式下加载.ocamlinit

时间:2014-01-03 09:32:34

标签: ocaml

我发现当我在终端中运行ocaml时,即在交互模式下,它将加载.ocamlinit。但是,当我运行ocaml test.ml时,即在脚本模式下,它不会加载.ocamlinit文件。这实际上给我带来了一些麻烦,因为我在.ocamlinit中有以下设置:

let () =
  try Topdirs.dir_directory (Sys.getenv "OCAML_TOPLEVEL_PATH")
  with Not_found -> ()
;;

#use "topfind";;
#thread;;
#camlp4o;;
#require "core.top";;
#require "core.syntax";;

因此,当我以交互模式运行时,#use "topfind"将被执行,我可以在我的代码中打开其他库。但由于.ocamlinit未在脚本模式下加载,因此当我在终端中运行ocaml test.ml时,test.ml就像这样:

  

打开Core.Std ;;

     

let()= print_endline“hello world”

它将失败并显示错误:"Error: Unbound module Core"

我的问题是:

  1. 如何解决此问题,以便在脚本模式下运行ocaml时,还会加载.ocamlinit文件?
  2. 为什么ocaml顶级系统不会以脚本模式加载.ocamlinit文件?
  3. PS。 OCaml 版本为4.01.0

1 个答案:

答案 0 :(得分:4)

我认为这是顶级的“错误”(或至少是意外的行为)。这可以在OCaml的未来版本中修复。除了ocaml -noprompt < test.ml之外,我没有一个令人满意的解决方案(这不是等同的,因为你将从顶层得到一些嘈杂的输出而不仅仅是你执行的文件),或者当然是编译程序并运行它(这可能就像ocamlbuild test.byte && ./test.byte)一样简单。