Ocaml:未知指令`require'

时间:2019-02-13 20:58:39

标签: ocaml toplevel ocaml-toplevel

在加载OCaml时,在终端上加载ocaml时会收到以下消息:

   ocaml
    OCaml version 4.07.1

   Unknown directive `require'.

到底是什么问题?


我以前修改了ocamlinit文件,因为遇到了一些问题。现在包含:

(* ## added by OPAM user-setup for ocamltop / base ## 3ec62baf6f9c219ae06d9814069da862 ## you can edit, but keep this line *)


(* Added by OPAM. *)                                                            

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

#require "yojson";;
#use "topfind";;
#camlp4o
#thread;;
Topfind.don't_load ["compiler-libs.toplevel"];;
#require "core.top";;
#require "core.syntax";;
(* ## end of OPAM user-setup addition for ocamltop / base ## keep this line *)

编辑:

我在ocaml command line cannot find “topfind”之前看过这个问题,但是我发现它没有帮助,因为答案中没有任何地方指定您每次打开ocaml之前都需要运行eval $(opam config env),如下所示通知了我。因此,我认为此人的澄清对于其他人可以在此站点上使用。

1 个答案:

答案 0 :(得分:2)

您应将#use "topfind"放在任何#require指令之前。因此,将#require "yojson";;放在.ocamlinit文件的末尾(在注释后添加它也是一个好主意)。

#require指令由ocamlfind工具通过topfind脚本提供,该脚本通过#use指令(标准的内置指令)加载到顶层。用于加载文件。 topfind文件在顶层初始化ocamlfind系统,以便顶层现在可以访问ocamlfind基础结构并加载系统中安装的库。如果您正在使用opam安装软件包,那么在启动顶层之前,请不要忘记在终端中进行eval $(opam config env)(或更短的版本,在opam 2.x eval $(opam env)中可用)。例如,

eval $(opam config env)
ocaml

这是.ocamlinit文件的正确内容:

(* ## added by OPAM user-setup for ocamltop / base ## 3ec62baf6f9c219ae06d9814069da862 ## you can edit, but keep this line *)


(* Added by OPAM. *)                                                            

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


#use "topfind";;
#camlp4o
#thread;;
Topfind.don't_load ["compiler-libs.toplevel"];;
#require "core.top";;
#require "core.syntax";;
(* ## end of OPAM user-setup addition for ocamltop / base ## keep this line *)

#require "yojson";;